没有参考书,只能先百度别人是如何配置的。首先确定需要使用 @ResponseBody 注解,而XML配置如下:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>
<bean id="mappingJackson2HttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
<value>text/json;charset=UTF-8</value>
</list>
</property>
</bean>
我的springMVC是基于java配置的(个人爱好),所以不能直接粘xml配置。但是xml和java配置是有对应关系的(尽管不是完全对应)。所以,还是可以得到一些信息。 显然,这块配置的重点在于MappingJackson2HttpMessageConverter类,和其supportedMediaTypes属性;
于是在springWeb部分的文档查找MappingJackson2HttpMessageConverter类,相关度最高的结果如下:
文档链接:https://docs.spring.io/spring-framework/docs/4.3.10.RELEASE/spring-framework-reference/html/mvc.html#mvc-features
(英语不行的,可以下一个有翻译功能的浏览器(chrome就不错),虽然翻译水平很差,但比没有强,另外,在当前页面按 ctrl+f 可以查找内容,和word一样)
查找文档,并且结合先前的xml信息,可以得知(或者说猜测):配置消息转化器,需要重写WebMvcConfigurerAdapter类的configureMessageConverters方法。然后在方法中new 一个MappingJackson2HttpMessageConverter对象,并设置其supportedMediaTypes属性。
最后将对象添加到方法的入口参数converters对象中。(注:WebMvcConfigurerAdapter类就是配置视图解析器的那个类)
到这终于可以敲代码了:
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter mapJacksonConverter=new MappingJackson2HttpMessageConverter();
mapJacksonConverter.setSupportedMediaTypes(mediaTypesList); // 到这一步发现此方法接受List<MediaType>参数,然后又是一番尝试 o(╯□╰)o
List<MediaType> mediaTypesList = new LinkedList<MediaType>(); // List 只是一个接口,意味着不能通过LIst<Object> list=new List<Object> () 实例化,需要给List赋一个子类对象, 比如LinkedList;
mediaTypesList.add(MediaType.APPLICATION_JSON_UTF8);
mediaTypesList.add(MediaType.TEXT_HTML);
mediaTypesList.add(MediaType.APPLICATION_JSON_UTF8);
converters.add(mapJacksonConverter);
}
最后不要忘记在返回对象的控制器方法上加 @ResponseBody 注解
本来以为这样就可以了,可是运行不出结果。百度得知, springMVC将对象解析为json格式需要 jackson的包,不过不用格外配置,构建路径就行,因为springMVC对jackson是默认支持的
将依赖的包下载后导入(如果是maven工程,就在pom.xml配置),导入jackson-annotations-2.9.7, jackson-core-2.9.7,jackson-databind-2.9.7 这三个包
运行成功;
控制器返回前端的是一个json对象,输出对象内容可以使用如下语句:
function(data,status){
alert("数据: " + data.city+ "\n状态: " + status); //此函数是jquery的 post()回调函数,'city'是对象的属性之一
}
效果如下:
这就是基于java 配置 对象转换为json格式;