我有一个关于 @ControllerAdvice
以及 @ExceptionHandler
. 我有一个休息控制器注解 @RestController
它有两个api。如果参数验证失败,则抛出 MethodArgumentNotValidException
. 我创造了 ExceptionHandler
要处理此问题:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = {MethodArgumentNotValidException.class})
public ResponseEntity<String> handleException(MethodArgumentNotValidException e) throws Exception {
return new ResponseEntity<>(e.getBindingResult().getGlobalError().getDefaultMessage(), HttpStatus.BAD_REQUEST);
}
}
如果我想在这个异常发生时记录一些东西,我可以在之前添加一行代码吗 return
声明如下: LOG.info("something happened");
它会记录它,然后将错误的请求返回给调用者吗?
1条答案
按热度按时间9fkzdhlc1#
如果我想在这个异常发生时记录一些东西,我能在return语句之前添加一行代码吗
log.info(“发生了什么事”);
它会记录它,然后将错误的请求返回给调用者吗?
对。这就是使用
@ExceptionHandler
s。它们有助于减少跨项目中定义的多个rest端点处理异常的代码。这也可以作为单点记录异常,从而避免这种反模式:不过,您还是可以获得一些好处,比如 Package 异常并重新引用它们:
你可以想到
@ExceptionHandler
作为一个巨人catch
阻止所有rest端点和特定类型的异常。另外,你的
GlobalExceptionHandler
类成为具有相关逻辑的组件,以处理后端抛出的每个异常,并处理如何向客户端报告该异常。