我使用SpringVersion4.x,并将其升级到5.x --我注意到,如果请求中没有提供Accept报头,一些API请求将失败(MissingRequestHeaderException)。
接口实际上并不需要它们,因为它没有被使用。接口中没有它的API工作得很好。一个解决方案是将它从所有API中删除,无论它在哪里。但这不是我们现在想要走的道路,我正在寻找一个通用的解决方案,可以应用于所有API,而不必分别更改每个API。
有没有办法让Spring在接口中忽略这个参数?
或者可能处理MissingRequestHeaderException从而忽略它并处理API请求,这是可能的吗?
API接口:
public Void setEmployeeDetails( @PathVariable( "employeeId" )Integer employeeId, @Valid @RequestBody EDetails eDetails, String accept ) 实现接口的API控制器:
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)发布于 2019-09-05 19:10:15
MissingRequestHeaderException的Javadoc说:
@RequestMappingServletRequestBindingException子类,该子类指示不存在在方法的方法参数中所需的请求头。
在检查Spring源代码时,这个异常似乎也是由RequestHeaderMethodArgumentResolver抛出的,它说:
解析用
@RequestHeader注释的方法参数,但Map参数除外。有关用RequestHeaderMapMethodArgumentResolver注释的Map参数的详细信息,请参阅@RequestHeader。@RequestHeader是从请求头解析的命名值。它有一个必需的标志和一个当请求头不存在时返回的默认值。
因此,如果您得到了该错误,这似乎是因为您的代码请求Accept头,而没有指定required=false。
@RequestMapping(...)
public void foo(@RequestHeader(name="Accept", required=false) String accept) {
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑
// Missing!
...
}https://stackoverflow.com/questions/57811495
复制相似问题