ExceptionHandlerExceptionResolver的理解难点

Difficulties in understanding ExceptionHandlerExceptionResolver

我无法理解为什么 ExceptionHandlerExceptionResolver 抛出异常。 我写了一个自定义 @RestControllerAdvice ExceptionHandler 来捕获我的 Spring 启动应用程序抛出的异常。在捕获我的 ExceptionHandler returns 作为响应来自抛出的异常的消息之后。但是我仍然从 ExceptionHandlerExceptionResolver 收到一条日志消息,我不知道为什么。

这里是日志消息:

2022-05-04 10:08:53.043  INFO 17600 --- [nio-8080-exec-3] at.sds.wm.common.CommonExceptionHandler  : Equipment Barbell 660Kg exists already. Either id already taken or name combined with same equipment already saved
2022-05-04 10:08:53.049  WARN 17600 --- [nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [at.sds.wm.equipment.exceptions.EquipmentExistsAlreadyException: Equipment Barbell 660Kg exists already. Either id already taken or name combined with same equipment already saved]

我首先想到 ExceptionHandlerExceptionResolver 被调用是因为我的 ExceptionHandler 抛出异常,但事实并非如此。

关于如何抑制第二个日志的任何提示和技巧,或者有人可以解释为什么 ExceptionHandlerExceptionResolver 被调用吗?

下面是我调用的 ExceptionHandler 部分的代码片段:

    @ExceptionHandler(value = {WorkoutExistsAlreadyException.class, EquipmentExistsAlreadyException.class, ExerciseExistsAlreadyException.class})
    @ResponseStatus(code = HttpStatus.CONFLICT)
    public String handleExistsAlreadyException(RuntimeException ex) {
        log.info(ex.getMessage());
        return ex.getMessage();
    }

这与应用程序有关属性 spring.mvc.log-resolved-exception。这在 spring-boot 中默认设置为 false,但如果您使用 spring-boot-devtools,则它会切换为 true。

所以在那种情况下,您必须声明 spring.mvc.log-resolved-exception = false 异常处理程序解析器停止写入有关异常的警告。

Referenced Spring boot doc