当前位置: 首页 > 知识库问答 >
问题:

Spring Boot手册内容协商

孙震博
2023-03-14

我正在重写旧的rest api,需要保持与它的兼容性。旧api使用servlet并适用于xml和json。逻辑如下:

  • 它检查“Content Type”标题,如果支持(“text/xml”、“application/xml”、“application/json”),则按原样使用

如何使用Spring MVC(使用Spring Boot)获得相同的结果?我尝试在config类中重写configureContentNegotiation,但似乎不起作用:

@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*/
}

共有1个答案

齐雅畅
2023-03-14

您可以使用HttpServletRequest获取请求标头值。

@Autowire
HttpServletRequest request;

private String getContentType() {
    return request.getHeader("Content-Type");
}
 类似资料:
  • Apache支持HTTP/1.1规范中定义的内容协商,它可以根据浏览器提供的参数选择一个资源最合适的媒体类型、语言、字符集和编码的表现方式。它还实现了一些对浏览器发送不完整内容协商信息进行智能处理的能力。 内容协商由mod_negotiation模块支持,并被默认编译进服务器。 关于内容协商(Content Negotiation) 一个资源可能会有多种不同的表现形式,比如,可能会有不同语言或者媒

  • You can configure how Spring MVC determines the requested media types from the request. The available options are to check the URL path for a file extension, check the "Accept" header, a specific quer

  • 主要内容:关于内容协商Apache HTTPD支持规范中描述的内容协商。它可以根据浏览器提供的媒体类型,语言,字符集和编码首选项,选择资源的最佳表示形式。它还实现了一些功能,可以更智能地处理来自发送不完整协商信息的浏览器的请求。 内容协商由模块提供,该模块默认编译。 关于内容协商 资源可以以多种不同的表示形式提供。例如,它可能以不同语言或不同媒体类型或组合形式提供。选择最合适选择的一种方法是为用户提供索引页面,然后让他

  • 内容协商是基于客户端或服务器偏好选择多种可能的表示之一以返回客户端的过程。 确定接受的渲染器 REST framework 根据可用的渲染器,每个渲染器的优先级以及客户端的 Accept: header,使用简单的内容协商风格来确定应将哪些媒体类型返回给客户端。所使用的风格部分由客户端驱动,部分由服务器驱动。 更具体的媒体类型优先于较不特定的媒体类型。 如果多种媒体类型具有相同的特性,则优先根据为

  • 推荐使用 Dubbo 协议。各协议的性能情况,请参见:性能测试报告

  • 问题内容: 我在Spring-boot应用程序中编写了一个简单的REST控制器,但是我不确定如何实现内容协商以使其基于请求标头中的Content- Type参数返回JSON或XML。有人可以告诉我,我在做什么错? 控制器方式: 调用此方法时,我总是会得到JSON(即使我将be 指定为或)。 当我实现两个具有不同映射和不同内容类型的方法时,我可以从xml中获取XML,但是如果我在一个方法中指定两个m