Spring Boot Actuator管理端点异常处理

Rad*_*Rad 6 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Md *_*hik 0

您可以使用控制器建议。Spring\xe2\x80\x99s@ControllerAdvice注解是一种特殊形式@Component用于处理控制器的横切问题。最常见的用例是提供异常处理程序,但它也可以做一些其他巧妙的事情。

\n\n
@ControllerAdvice\npublic class ExceptionControllerAdvice {\n\n    @ExceptionHandler(Exception.class)\n    public ModelAndView exception(Exception e) {\n        ModelAndView mav = new ModelAndView("exception");\n        mav.addObject("name", e.getClass().getSimpleName());\n        mav.addObject("message", e.getMessage());\n\n        return mav;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n