我有一个异常类,如下面的
@ResponseStatus(value=HttpStatus.UNPROCESSABLE_ENTITY, reason="Unprocessable Entity") // 422
public class UnprocessableEntityException extends RuntimeException {
}
现在状态不会返回422,除非我在Controller类中编写一个特定的处理程序,如:
@ExceptionHandler(UnprocessableEntityException.class)
@ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY)
public String handleException(Exception ex) {
...
}
据我所知,我不应该首先需要@ExceptionHandler,不知道我错过了什么。
答案 0 :(得分:0)
从控制器方法中抛出@ResponseStatus
带注释的异常应该足以让框架编写HTTP状态代码 - 不需要@ExceptionHandler
。
以下内容将按预期命中webapp root写入422状态:
@Controller
public class ExceptionController {
@RequestMapping("/")
public void action() {
throw new ActionException();
}
@ResponseStatus(value = HttpStatus.UNPROCESSABLE_ENTITY, reason = "nope")
public static class ActionException extends RuntimeException {}
}
由默认情况下由Spring MVC创建的ResponseStatusExceptionResolver
提供 - 如果它不适合你,我的猜测是这个默认的异常解析器已被删除(例如覆盖{{ 1}}或以其他方式配置您的上下文的WebMvcConfigurationSupport.configureHandlerExceptionResolvers
以便HandlerExceptionResolver
被打破。)
答案 1 :(得分:0)
抛出的异常不应由代码或其他异常解析器处理,例如它不应由@ExceptionHandler
处理,因为它将覆盖由异常类指定的状态代码' s @ResponseStatus
。