我经历了其他类似的询问问题,但对我没有任何帮助。
默认情况下,* 我所有的 API返回JSON 作为响应: *
由于某些XML API,我不得不添加jackson-xml
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency>
现在 默认为“ 不带接受标头”,所有响应均为XML 。
我想将 JSON作为默认响应格式 。
如文档中所述:
https://spring.io/blog/2013/05/11/content-negotiation-using-spring- mvc
我实现了以下配置:
@Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false).favorParameter(true).parameterName("mediaType").ignoreAcceptHeader(true) .useJaf(false).defaultContentType(MediaType.APPLICATION_JSON) .mediaType("xml", MediaType.APPLICATION_XML).mediaType("json", MediaType.APPLICATION_JSON); }
情况1: 如果我创建了,ignoreAcceptHeader(true) 则所有内容都是JSON,甚至XML API返回JSON。
ignoreAcceptHeader(true)
案例2: 如果ignoreAcceptHeader(false)是则默认为XML。
ignoreAcceptHeader(false)
我忘了提到我的API的样子:
@RequestMapping(value = "/getXml", method = RequestMethod.GET) public ResponseEntity<String> getXml( HttpServletRequest request) throws JAXBException { return returnXml(); }
我在这里很失落,我想要的只是Default(Without AcceptHeader)应该是JSON。(API以字符串形式返回XML)
并且,当定义了Accept Header:“ Application / xml”时,响应应为XML。
任何建议都会有很大帮助。
谢谢。
通常,如果要获取json响应,则需要一个jackson-databind模块:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${json-jackson-version}</version> </dependency>
然后必须MappingJackson2HttpMessageConverter在配置中定义一个:
MappingJackson2HttpMessageConverter
@Configuration @EnableWebMvc public class WebAppMainConfiguration extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new MappingJackson2HttpMessageConverter()); [..] super.configureMessageConverters(converters); } [...] }
在您的情况下,您可以实现自己的AbstractGenericHttpMessageConverter,以便可以根据媒体类型在不同的具体转换器之间切换此转换器。
检查方法 AbstractGenericHttpMessageConverter#writeInternal(..)
AbstractGenericHttpMessageConverter#writeInternal(..)