java - Spring Boot 执行器管理端点异常处理

标签 java spring spring-mvc spring-boot spring-boot-actuator

问题:如何处理管理上下文中 MVC 端点中抛出的异常?

public class MyMvcEndpoints extends EndpointMvcAdapter {
    @ResponseBody
    @RequestMapping(method = GET, value = "/foo", produces = APPLICATION_JSON_VALUE)
    public Foo foo() {
        throw new FooNotFound("Foo Not Found!");
    }
}

@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class FooNotFound extends RuntimeException {
    public NotFoundException(String message){
        super(message);
    }
}

使用当前配置,我收到 500 而不是 404。我尝试了异常处理的常用方法,如 ControllerAdvice、ExceptionHandler 方法等。没有成功。
我还在 EndpointWebMvcChildContextConfiguration 中找到了 CompositeHandlerExceptionResolver ,它负责异常处理。我尝试定义自己的 HandlerExceptionResolver bean,但它无法在管理上下文中找到我的解析器。

最佳答案

您可以使用 Controller 建议。 Spring 的 @ControllerAdvice 注释是 @Component 的一种特殊形式,用于处理 Controller 的横切关注点。最常见的用例是提供异常处理程序,但它也可以做一些其他巧妙的事情。

@ControllerAdvice
public class ExceptionControllerAdvice {

    @ExceptionHandler(Exception.class)
    public ModelAndView exception(Exception e) {
        ModelAndView mav = new ModelAndView("exception");
        mav.addObject("name", e.getClass().getSimpleName());
        mav.addObject("message", e.getMessage());

        return mav;
    }
}

关于java - Spring Boot 执行器管理端点异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45435535/

相关文章:

java - 具有复杂类字段的 Spring Data jpa 规范标准

java - 使用 Scanner 读取文件时出现 InputMismatchException

java - Apache Derby 和 Java - 优化插入

java - spring-ws 如何给请求体中的soap action 添加一个属性

spring - 如何忽略特定 http 动词(GET、POST、PUT)的 swagger 资源属性

java - Java中是否为未使用的字段分配了内存?

javascript - 带有内部 React 的 Spring Boot - 以正确的方式传递 ENV

java - 在将 tomcat 用于 java web 应用程序的 linux 机器上,当我从 tomcat 运行应用程序时,文件/文件夹创建/修改权限被拒绝的问题

java - 使用@Pattern时如何获取验证输入的值?

java - Spring Hibernate 自定义 bean 验证 - NullPointerException