SpringMVC中内容协商【统一资源多种展现json xml html】
?
2、使用扩展名称
?? 丧失了同一url多种展现的方式,但现在这种在实际环境中是使用比较方便的。
3、使用Request Header中Accpet
?? 这种方式是最理想的,但如果你的资源要给用户直接通过浏览器访问(即html展现),那么由于浏览器的差异,发送上来的Accept Header头将是不一样的.?将导致服务器不知要返回什么格式的数据给你. 下面是浏览器的Accept Header:
Chrome:
?
Firefox:
?
IE9:
?我们使用第一种方式和第二种方式,在Spring中如何让配置
?
二、SpringMVC配置
?? 现spring完成内容协商(content negotiation)的工作是由ContentNegotiatingViewResolver来完成的。
它的工作模式支持我上面讲的三种,ContentNegotiatingViewResolver是根据客户提交的MimeType(如 text/html,application/xml)来跟服务端的一组viewResover的MimeType相比较,如果符合,即返回viewResover的数据。
而 /userController/getUser.xml, ContentNegotiatingViewResolver会首先将 .xml 根据mediaTypes属性将其转换成 application/xml,然后完成前面所说的比较。
?
1、我们看下ContentNegotiatingViewResolver的配置:
?我们在创建User对象
?
?我们的控制层很简单的
?
?中false修改为true
?
我们再次在浏览器中输入:http://localhost:8080/SpringMVC/userController/getUser?format=json
?结果是:
?
2、重载MappingJacksonJsonView
? 我们在返回JSON格式的数据时,发现并不是我们常见的json。?也就是我们期望的返回是{success:true,message:”return ok”};? 但实际返回的却是 {"jsonResult":{"success":true,"msg":"return ok"}}
原因是MappingJacksonJsonView中对返回值的处理未考虑modelMap中只有一个值的情况,?直接是按照mapName:{mapResult}的格式来返回数据的。?替换为我们刚修改的
{"username":"wy","password":"123","age":123,"sex":"male","birthday":"2013-09-10"}?
?参考:http://badqiu.iteye.com/blog/552806