首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring5.x中缺少请求头“接受”

在Spring5.x中缺少请求头“接受”
EN

Stack Overflow用户
提问于 2019-09-05 18:54:33
回答 1查看 845关注 0票数 0

我使用SpringVersion4.x,并将其升级到5.x --我注意到,如果请求中没有提供Accept报头,一些API请求将失败(MissingRequestHeaderException)。

接口实际上并不需要它们,因为它没有被使用。接口中没有它的API工作得很好。一个解决方案是将它从所有API中删除,无论它在哪里。但这不是我们现在想要走的道路,我正在寻找一个通用的解决方案,可以应用于所有API,而不必分别更改每个API。

有没有办法让Spring在接口中忽略这个参数?

或者可能处理MissingRequestHeaderException从而忽略它并处理API请求,这是可能的吗?

API接口:

代码语言:javascript
复制
public Void setEmployeeDetails( @PathVariable( "employeeId" )Integer employeeId, @Valid @RequestBody EDetails eDetails, String accept ) 

实现接口的API控制器:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-05 19:10:15

MissingRequestHeaderException的Javadoc说:

@RequestMapping ServletRequestBindingException子类,该子类指示不存在在方法的方法参数中所需的请求头。

在检查Spring源代码时,这个异常似乎也是由RequestHeaderMethodArgumentResolver抛出的,它说:

解析用@RequestHeader注释的方法参数,但Map参数除外。有关用RequestHeaderMapMethodArgumentResolver注释的Map参数的详细信息,请参阅@RequestHeader @RequestHeader是从请求头解析的命名值。它有一个必需的标志和一个当请求头不存在时返回的默认值。

因此,如果您得到了该错误,这似乎是因为您的代码请求Accept头,而没有指定required=false

代码语言:javascript
复制
@RequestMapping(...)
public void foo(@RequestHeader(name="Accept", required=false) String accept) {
    //                                        ↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    //                                           Missing!
    ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57811495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档