前景提要
HDC调试需求开发(15万预算),能者速来!>>>
原本使用@ResponseBody返回json数据,但由于需要使用jackson-dataformat-xml包(该包还依赖jackson-module-jaxb-annotations),结果所有response都变成了xml。只要去掉这2个包,就正常了。
看了一下RequestMappingHandlerAdapter源码
以下是默认的构造函数,添加了 几个 默认的converter public RequestMappingHandlerAdapter() { StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); stringHttpMessageConverter.setWriteAcceptCharset(false); // see SPR-7316 this.messageConverters = new ArrayList<HttpMessageConverter<?>>(4); this.messageConverters.add(new ByteArrayHttpMessageConverter()); this.messageConverters.add(stringHttpMessageConverter); this.messageConverters.add(new SourceHttpMessageConverter<Source>()); this.messageConverters.add(new AllEncompassingFormHttpMessageConverter()); }
最后一行内部如下:根据项目情况,jaxb2Present==true,jackson2Present=true,jackson2XmlPresent=true,gsonPresent=false public AllEncompassingFormHttpMessageConverter() { addPartConverter(new SourceHttpMessageConverter<Source>()); if (jaxb2Present && !jackson2Present) { addPartConverter(new Jaxb2RootElementHttpMessageConverter()); } if (jackson2Present) { addPartConverter(new MappingJackson2HttpMessageConverter()); } else if (gsonPresent) { addPartConverter(new GsonHttpMessageConverter()); } if (jackson2XmlPresent) { addPartConverter(new MappingJackson2XmlHttpMessageConverter()); } }
所以,看样子是MappingJackson2HttpMessageConverter和MappingJackson2XmlHttpMessageConverter同时都有了。但怎么能禁止xml视图,只返回json呢?
以下是spring配置文件中的内容 < annotation-driven /> <beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <beans:property name="messageConverters"> <beans:list> <beans:bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> <beans:bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/> <beans:bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <beans:property name="objectMapper"> <beans:bean class="com.fasterxml.jackson.databind.ObjectMapper"> <beans:property name="dateFormat"> <beans:bean class="java.text.SimpleDateFormat"> <beans:constructor-arg type="java.lang.String" value="yyyy-MM-dd HH🇲🇲ss"/> </beans:bean> </beans:property> </beans:bean> </beans:property> <beans:property name="supportedMediaTypes"> <beans:list> <beans:value>application/json;charset=UTF-8</beans:value> </beans:list> </beans:property> </beans:bean> <beans:bean class="org.springframework.http.converter.StringHttpMessageConverter"> <beans:constructor-arg value="UTF-8"></beans:constructor-arg> <beans:property name="supportedMediaTypes"> <beans:list> <beans:value>text/plain;charset=UTF-8</beans:value> </beans:list> </beans:property> </beans:bean> </beans:list> </beans:property> </beans:bean>