我有一个如下所示的异常类
@ResponseStatus(value=HttpStatus.UNPROCESSABLE_ENTITY, reason="Unprocessable Entity") // 422
public class UnprocessableEntityException extends RuntimeException {
}
Run Code Online (Sandbox Code Playgroud)
现在状态不会返回为 422,除非我在 Controller 类中编写了一个特定的处理程序,例如:
@ExceptionHandler(UnprocessableEntityException.class)
@ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY)
public String handleException(Exception ex) {
...
}
Run Code Online (Sandbox Code Playgroud)
据我了解,我首先不需要@ExceptionHandler,不确定我错过了什么。
从控制器方法抛出@ResponseStatus带注释的异常应该足以让框架编写 HTTP 状态代码 - 没有@ExceptionHandler必要。
以下内容将按预期在访问 webapp 根目录时写入 422 Status:
@Controller
public class ExceptionController {
@RequestMapping("/")
public void action() {
throw new ActionException();
}
@ResponseStatus(value = HttpStatus.UNPROCESSABLE_ENTITY, reason = "nope")
public static class ActionException extends RuntimeException {}
}
Run Code Online (Sandbox Code Playgroud)
这得益于ResponseStatusExceptionResolverSpring MVC 默认创建的 s - 如果它不适合你,我的猜测是这个默认的异常解析器已被删除(例如通过覆盖WebMvcConfigurationSupport.configureHandlerExceptionResolvers或以其他方式配置你的上下文的HandlerExceptionResolvers ,以便 sResponseStatusExceptionResolver被击败。)
| 归档时间: |
|
| 查看次数: |
6259 次 |
| 最近记录: |