Spring 启动手动内容协商



我正在重新设计旧的 rest api,需要保持与它的兼容性。旧 api 使用 servlet,并且可以处理 xml 和 json。逻辑如下:

  • 它检查"内容类型"标头,如果支持("文本/xml","应用程序/xml","应用程序/json"(,则按原样使用;
  • 如果不支持(例如"*/*"、"文本/
  • 纯文本"、"多部分/表单数据"(或不存在,则使用"应用程序/XML";
  • 然后,">
  • 接受"标头以与唯一添加相同的方式进行检查,如果它不存在与使用"内容类型"相同的值。

如何使用Spring MVC(使用Spring Boot(获得相同的结果?我试图在配置类中覆盖配置内容协商,但它似乎不起作用:

@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
@ComponentScan(basePackages = {"..."})
public class AppConfiguration extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentTypeStrategy((NativeWebRequest request) -> {
String header = request.getHeader("Content-Type");
MediaType mediaType;
if (Objects.isNull(header)) {
mediaType = MediaType.APPLICATION_XML;
} else switch (header) {
case MediaType.TEXT_XML_VALUE:
case MediaType.APPLICATION_XML_VALUE:
case MediaType.APPLICATION_JSON_VALUE:
case MediaType.APPLICATION_JSON_UTF8_VALUE:
mediaType = MediaType.valueOf(header);
break;
default:
mediaType = MediaType.APPLICATION_XML;
}
return Arrays.asList(mediaType);
});
}
/*the rest of configuration*/
}

您可以将 HttpServletRequest 用于请求标头值。

@Autowire
HttpServletRequest request;
private String getContentType() {
return request.getHeader("Content-Type");
}

相关内容

  • 没有找到相关文章

最新更新