读好书,交益友
分类: Java
2013-10-29 11:37:45
pring的mvc 3.0和3.1处理json略有不同,用RequestMappingHandlerMapping和RequestMappingHandlerAdapter替代了原有的DefaultMethodHandlerMapping和 AnnotationMethodHandlerAdapter。
在controller里支持使用@RequestBody注解,自动将requestbody里的json字符串的entity 转换为对应的对象实例,需要增加messageconverter,默认没有MappingJackson2HttpMessageConverter, @ResponseBody对应了一系列解析器,RequestMappingHandlerAdapter的messageConverters属性,默认情况下会自动注册一堆Converter,
Converter是每种对象类型都有一个专门针对的默认情况下没有Map对应的解析器,可能会映射到MappingJackson2HttpMessageConverter,
例如如下代码
@RequestMapping(value = "/vpnserver/status", method = RequestMethod.GET)
@ResponseBody
public Map status()
{
String retstr = "stop";
Map
List
if(ls.size()>0)
{
retstr = "running";
}
map.put("status",retstr);
return map;
}
加了@ResponseBody注解后,return的数据如何解析就是这个属性配置的Converter负责的。
3.1之后默认注入RequestMappingHandlerAdapter只需加上ackson-annotations-2.0.5.jar,jackson-databind-2.0.5.jar,jackson-core-2.0.5.jar。
类似的文件配置文件
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
java代码,其实不用添加
public class ApplicationContext extends WebMvcConfigurerAdapter {
。。。。。。。
@Override
public void configureMessageConverters(List
converters.add(converter());
}
@Bean
MappingJackson2HttpMessageConverter converter() {
//Set HTTP Message converter using a JSON implementation.
MappingJackson2HttpMessageConverter jsonMessageConverter = new MappingJackson2HttpMessageConverter();
// Add supported media type returned by BI API.
List
supportedMediaTypes.add(new MediaType("text", "plain"));
supportedMediaTypes.add(new MediaType("application", "json"));
jsonMessageConverter.setSupportedMediaTypes(supportedMediaTypes);
return jsonMessageConverter;
}
}
也可以使用WebMvcConfigurationSupport 代替 WebMvcConfigurerAdapter ,可以进行更多类型的定制。
处于Ajax返回json字符串的中文乱码问题
org.springframework.http.converter.StringHttpMessageConverter类是处理请求或相应字符串的类,并且默认字符集为ISO-8859-1,所以在当返回json中有中文时会出现乱码。
StringHttpMessageConverter的父类里有个List
解决办法,只需在配置文件中加入如下代码:
如果需要处理其他 MediaType 类型,可在list标签中加入其他value标签