【问题标题】:Spring boot - setting default Content-type header if it's not present in requestSpring boot - 如果请求中不存在,则设置默认的 Content-type 标头
【发布时间】:2018-06-21 07:31:13
【问题描述】:

我遇到了以下问题:假设我有时会收到没有设置 Content-type 标头的 POST 请求。在这种情况下,我想默认为Content-type=application/json

我可以使用 Spring Boot 功能而不使用过滤器以某种方式实现这一点吗?

谢谢

【问题讨论】:

  • 你能添加一个小代码示例来说明你是如何使用标题的吗?
  • 是在讨论请求还是响应内容类型?你试过@RequestMapping(consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE) 吗?
  • @radistao 建议的答案将强制 api 仅采用 json,如果您发送 xml,api 将响应说此内容类型不受支持。所以如果 xml 也是可以接受的,那么在消费列表中包含 xml。
  • 他在问我们是否可以修改请求以添加 Content-Type 标头,如果它不是由客户端发送的。

标签: spring spring-mvc spring-boot


【解决方案1】:

从 Spring Boot 2.x 开始,您需要创建一个扩展 WebMvcConfigurer 接口的类,例如:

@Configuration
class WebMvcConfiguration implements WebMvcConfigurer {
    @Override
    public void configureContentNegotiation( ContentNegotiationConfigurer configurer )
    {
        configurer.defaultContentType( MediaType.APPLICATION_JSON );
    }
}

在 1.x 下,您可以使用现已弃用的 WebMvcConfigurerAdapter 执行相同的操作。

这将影响请求和响应主体,因此如果您没有明确设置“produces”参数,并且您想要的不是 application/json,它将被强制转换为 application/json。

【讨论】:

  • 这是不正确的。这相当于设置默认的“Accept”标头,而不是默认的“Content-Type”标头,因此只会影响响应,而不是请求。
猜你喜欢
  • 2021-08-02
  • 2014-05-23
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
相关资源
最近更新 更多