我在控制器中有一个方法,例如有参数
@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
}
}