java - Spring 5.x 缺少请求 header "Accept"

标签 java spring rest spring-mvc

我使用的是 Spring 版本 4.x,升级到 5.x - 我注意到,如果请求中未提供 Accept header ,某些 API 请求会失败 (MissingRequestHeaderException)。

该接口(interface)实际上并不需要它们,因为它没有被使用。界面中没有它的 API 工作正常。解决方案是将其从所有 API 中删除,无论它在哪里。但这不是我们现在想要采取的路径,我正在寻找一种通用的解决方案,可以应用于所有 API,而无需单独更改每个 API。

有没有办法让 Spring 忽略接口(interface)中的这​​个参数?

或者也许处理 MissingRequestHeaderException 以便忽略它并处理 API 请求,这可能吗?

API接口(interface):

public Void setEmployeeDetails( @PathVariable( "employeeId" )Integer employeeId, @Valid @RequestBody EDetails eDetails, String accept ) 

实现接口(interface)的 API Controller :

Void setEmployeeDetails( @ApiParam(value = "ID of the employee.",required=true ) @PathVariable("employeeId") Integer employeeId,
                   @ApiParam(value = "" ,required=true ) @Valid @RequestBody EDetails eDetails, 
                   @RequestHeader("Accept") String accept)

最佳答案

MissingRequestHeaderException 的 Javadoc 说:

ServletRequestBindingException subclass that indicates that a request header expected in the method parameters of an @RequestMapping method is not present.

检查 Spring 源代码,似乎该异常仅由 RequestHeaderMethodArgumentResolver 抛出,其中显示:

Resolves method arguments annotated with @RequestHeader except for Map arguments. See RequestHeaderMapMethodArgumentResolver for details on Map arguments annotated with @RequestHeader.

An @RequestHeader is a named value resolved from a request header. It has a required flag and a default value to fall back on when the request header does not exist.

因此,如果您收到该错误,那是因为您的代码要求 Accept header ,但未指定 required=false,例如

@RequestMapping(...)
public void foo(@RequestHeader(name="Accept", required=false) String accept) {
    //                                        ↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    //                                           Missing!
    ...
}

关于java - Spring 5.x 缺少请求 header "Accept",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57811495/

相关文章:

java - 用spring创建内部类

ruby-on-rails - 用于 Ruby on Rails 中的 RESTful 服务的 WADL/WSDL 2.0

api - 版本控制 API 时如何管理代码重复?

java - HTML5/Javascript 验证复选框提交 URL 重定向

java - 应用小工具 : Ripple effect lost on list item when background is added to outer layout

java - 给定数百万个数字流,如何近似第 90 个百分位数

java - 服务器重新启动后,Spring Security Remember Me 还能工作吗?

java - @ControllerAdvice 不处理异常

rest - 使用基于 HMAC 的签名如何以及在何处存储 REST API 的 key

java - 如何让扫描仪与阵列配合使用