小编典典

Spring MVC:将默认响应格式从xml更改为json

spring-boot

我经历了其他类似的询问问题,但对我没有任何帮助。

默认情况下,* 我所有的 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。

案例2: 如果ignoreAcceptHeader(false)是则默认为XML。

我忘了提到我的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。

任何建议都会有很大帮助。

谢谢。


阅读 533

收藏
2020-05-30

共1个答案

小编典典

通常,如果要获取json响应,则需要一个jackson-databind模块:

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>${json-jackson-version}</version> 
</dependency>

然后必须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(..)

2020-05-30