我正在使用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 })
只会出现另一个错误:
无法排除以下类,因为它们不是自动配置类
答案 0 :(得分:0)
您可以使用ContentNegotiationManagerFactoryBean
设置默认内容类型,而不是创建自己的ContentNegotiationConfigurer
。
在WebMvcConfigurerAdapter
中,覆盖方法configureContentNegotiation()
并在提供的defaultContentType()
上调用方法ContentNegotiationConfigurer
。这样,自动配置的ContentNegotiationManager
将设置该选项。