GetMapping "produces" 即使与 accept header 不匹配也能正常工作
GetMapping "produces" works even though doesn't match accept header
简介
有一个@GetMapping
属性,在我们的一个项目中如下:
@GetMapping(path = "/", produces = SaConstants.SA_MEDIA_TYPE)
public HttpEntity<Resource<Home>> get(HttpServletResponse response) {
在 SaConstants class:
public static final String SA_MEDIA_TYPE="application/sa+json";
当我从任何 Internet 浏览器访问该页面时,我都得到了我想要的正确响应 - 并且我在控制器中的断点被触发。
浏览器正在发送以下 headers:
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
header,页面无法正常工作。
如果我向邮递员添加以下接受 header,一切正常:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
问题
我的问题是:
- 为什么即使请求的
Accept:
header 与 Rest Controller 的 produces
属性不匹配,它仍然有效?
- 如果没有提供 Accept header 为什么会失败(给出第一个问题)。
“*/*”表示所有类型,这个header是大多数流行浏览器默认提供的
简介
有一个@GetMapping
属性,在我们的一个项目中如下:
@GetMapping(path = "/", produces = SaConstants.SA_MEDIA_TYPE)
public HttpEntity<Resource<Home>> get(HttpServletResponse response) {
在 SaConstants class:
public static final String SA_MEDIA_TYPE="application/sa+json";
当我从任何 Internet 浏览器访问该页面时,我都得到了我想要的正确响应 - 并且我在控制器中的断点被触发。
浏览器正在发送以下 headers:
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
header,页面无法正常工作。
如果我向邮递员添加以下接受 header,一切正常:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
问题
我的问题是:
- 为什么即使请求的
Accept:
header 与 Rest Controller 的produces
属性不匹配,它仍然有效? - 如果没有提供 Accept header 为什么会失败(给出第一个问题)。
“*/*”表示所有类型,这个header是大多数流行浏览器默认提供的