XML作为Spring Rest的默认响应

时间:2018-03-31 15:28:30

标签: java spring spring-boot

我正在使用Spring Boot创建REST服务,当没有收到来自客户端的Accept头时,必须返回默认应用程序/ XML作为响应。不幸的是,Spring有默认的JSON。如何切换此默认行为?

到目前为止,我已经尝试过:

添加此依赖项有助于生成XML(但仅使用从客户端设置的Accept标头 - 因此没有默认值):

<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

尝试在@SpringBoot类中设置ContentNegotiationManagerFactoryBean的默认值

 @Bean
  ContentNegotiationManagerFactoryBean contentNegotiationManagerFactoryBean() {
    val myBean = new ContentNegotiationManagerFactoryBean();
    myBean.setDefaultContentType(MediaType.APPLICATION_XML);
    return myBean;
  }

导致错误:

  

org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration中的方法viewResolver $ WebMvcAutoConfigurationAdapter需要一个bean,但找到了2个

尝试通过以下方式排除它:

@SpringBootApplication(exclude = { ContentNegotiationManagerFactoryBean.class })

只会出现另一个错误:

  

无法排除以下类,因为它们不是自动配置类

1 个答案:

答案 0 :(得分:0)

您可以使用ContentNegotiationManagerFactoryBean设置默认内容类型,而不是创建自己的ContentNegotiationConfigurer

WebMvcConfigurerAdapter中,覆盖方法configureContentNegotiation()并在提供的defaultContentType()上调用方法ContentNegotiationConfigurer。这样,自动配置的ContentNegotiationManager将设置该选项。