在服务中引发异常时,Spring Boot ExceptionHandler >>

问题描述 投票:0回答:1

我正在使用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扩展...

java spring spring-boot exception
1个回答
0
投票

@ControllerAdvice用于处理传播通过控制器方法的异常(从控制器方法调用中引发的异常-包括冒泡异常)。因此,无论您在contorller方法中直接抛出异常还是在contoller方法正在调用时抛出异常,都将尝试通过建议处理该异常。

© www.soinside.com 2019 - 2024. All rights reserved.