我正在使用ControllerAdvice处理我的Spring Boot应用程序中的异常。
@Order(Ordered.HIGHEST_PRECEDENCE) @ControllerAdvice public class ErrorApiHandler extends ResponseEntityExceptionHandler { final ResponsesHelper rh; public ErrorApiHandler(ResponsesHelper rh) { this.rh = rh; } @ExceptionHandler(UsernameNotFoundException.class) public ResponseEntity<Object> handleUsernameNotFoundException(UsernameNotFoundException ex) { log.error(ExceptionUtils.getStackTrace(ex)); var error = buildError(ex); return rh.buildResponse(error, HttpStatus.NOT_FOUND); } ... }
对于在我的控制器内引发的异常,它工作正常。但是,如果抛出异常,例如在服务中,则不会执行ControllerAdvice。
@Service public class CustomUserDetailsService implements UserDetailsService { final UserRepository userRepository; public CustomUserDetailsService(UserRepository userRepository) { this.userRepository = userRepository; } @Override @Transactional public User loadUserByUsername(String email) throws UsernameNotFoundException { log.debug(String.format("Loading user %s", email)); User user = userRepository.findByEmail(email) .orElseThrow(() -> { log.debug(String.format("User %s not found", email)); return new UsernameNotFoundException("User not found : " + email); // <- This exception is not handled. }); log.debug(String.format("User %s loaded", user)); return user; }
如何处理应用程序中引发的所有异常?
提前感谢。
我正在使用ControllerAdvice处理我的Spring Boot应用程序中的异常。 @Order(Ordered.HIGHEST_PRECEDENCE)@ControllerAdvice公共类ErrorApiHandler扩展...
@ControllerAdvice
用于处理传播通过控制器方法的异常(从控制器方法调用中引发的异常-包括冒泡异常)。因此,无论您在contorller方法中直接抛出异常还是在contoller方法正在调用时抛出异常,都将尝试通过建议处理该异常。