【发布时间】:2018-01-08 04:27:16
【问题描述】:
问题:如何在管理上下文中处理 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,但它在管理上下文中找不到我的解析器。
【问题讨论】:
-
这看起来应该按原样工作。 Spring Boot 自己的一些端点在异常上使用
@ResponseStatus。 Here's one example。你所做的事情肯定还有一些你没有展示出来的东西。 -
有趣的是,在发布问题之前,我已经测试了您发送的确切代码,看看它是如何工作的:它还返回
500。 -
@Rad 你能找到任何解决方案吗?我有完全相同的问题。使用 Spring Boot 1.5.6
-
没有。我必须直接使用请求/响应对象来处理它:(
标签: java spring spring-mvc spring-boot spring-boot-actuator