gpt4 book ai didi

java - 拦截@RequestHeader 缺少 header 的异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:48 25 4
gpt4 key购买 nike

我在 Controller 中有一个方法,例如有参数

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

如果请求中没有 ETag header - 客户端收到 400 (BAD_REQUEST),这没有任何信息。我需要以某种方式处理这个异常并将我自己的异常发送给客户端(我为此目的使用 JSON)。我知道我可以通过@ExceptionHandler 拦截异常,但在那种情况下,将处理所有 HTTP 400 请求,但我希望 header 中缺少 ETag。有什么想法吗?

最佳答案

您还可以通过使用来自 spring 的注释 @ControllerAdvice 来实现这一点。

@ControllerAdvice
public class ExceptionHandler extends ResponseEntityExceptionHandler{

/**
* Handle ServletRequestBindingException. Triggered when a 'required' request
* header parameter is missing.
*
* @param ex ServletRequestBindingException
* @param headers HttpHeaders
* @param status HttpStatus
* @param request WebRequest
* @return the ResponseEntity object
*/
@Override
protected ResponseEntity<Object> handleServletRequestBindingException(ServletRequestBindingException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
return new ResponseEntity<>(ex.getMessage(), headers, status);
}

}

当您在没有所需请求 header 的情况下访问您的 API 时的响应是:

Missing request header 'Authorization' for method parameter of type String

像这个异常(exception),你可以自定义所有其他的异常(exception)。

关于java - 拦截@RequestHeader 缺少 header 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25151264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com