【问题标题】:GetMapping "produces" works even though doesn't match accept header即使与接受标头不匹配,GetMapping “产生”也有效
【发布时间】:2017-08-02 13:34:04
【问题描述】:

简介

在我们的一个项目中有一个@GetMapping 属性,如下所示:

@GetMapping(path = "/", produces = SaConstants.SA_MEDIA_TYPE)
public HttpEntity<Resource<Home>> get(HttpServletResponse response) {

在 SaConstants 类中:

public static final String SA_MEDIA_TYPE="application/sa+json";

当我从任何 Internet 浏览器访问该页面时,我得到了我想要的正确响应 - 并且我在控制器中的断点被触发。

浏览器正在发送以下标头:

Host: 127.0.0.1:8001
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
Cookie: io=Qt74kp5V5ziUNIxlAAAG

当我向页面发出请求时,如果没有 Accept 标头,则页面无法正常工作。

如果我向邮递员添加以下 Accept 标头,一切正常:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 

问题

我的问题是:

  • 为什么即使请求的 Accept: 标头与 Rest Controller 的 produces 属性不匹配,它仍然有效?
  • 如果没有提供 Accept 标头,为什么会失败(鉴于第一个问题)。

【问题讨论】:

    标签: spring request-mapping get-mapping


    【解决方案1】:

    "*/*" 表示所有类型,大多数流行浏览器默认提供此标头

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      相关资源
      最近更新 更多