java – 拦截缺少标头的@RequestHeader异常

我在控制器中有一个方法,例如有参数

@RequestMapping(value = "/{blabla}",method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public void post(@RequestHeader("ETag") int etag)

如果请求中没有ETag标头 – 客户端获得400(BAD_REQUEST),这不是任何信息.
我需要以某种方式处理此异常并将我自己的异常发送到客户端(我为此目的使用JSON).
我知道我可以通过@ExceptionHandler拦截异常,但在这种情况下,所有HTTP 400请求都将被处理,但我希望在标题中缺少ETag.
有任何想法吗?

最佳答案
您应该使用@ExceptionHandler方法查看是否存在ETag标头并采取适当的操作:

@ExceptionHandler(UnsatisfiedServletRequestParameterException.class)
public onErr400(@RequestHeader(value="ETag",required=false) String ETag,UnsatisfiedServletRequestParameterException ex) {
    if(ETag == null) {
        // Ok the problem was ETag Header : give your informational message
    } else {
        // It is another error 400  : simply say request is incorrect or use ex
    }
}

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...