我有大约50个弹簧控制器,可以在响应中返回 null 。像这样:
@RequestMapping(value = "/someUrl.controller", method = RequestMethod.GET)
public @ResponseBody Object getObject(@RequestParam("id") Long id) {
Object object = provider.getObject(id);
if (object == null ) {
return throw new EntityNotFoundException();
} else {
return object;
}
}
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler(EntityNotFoundException.class)
public @ResponseBody ExceptionDetails handleEntityNotFound(EntityNotFoundException e) {
return createErrorJsonView(e);
}
我的目标是避免对每个控制器进行 null检查,并为这种情况创建一些常规异常处理程序。
据我了解重写 HandlerMethodReturnValueHandler 弹簧处理程序,这不是一个好主意。
你有什么想法吗?
谢谢!
答案 0 :(得分:0)
对于异常处理程序,你是@ControllerAdvice对象并在那里注册你的处理程序:
@ControllerAdvice
class GlobalControllerExceptionHandler {
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler(EntityNotFoundException.class)
public @ResponseBody ExceptionDetails handleEntityNotFound(EntityNotFoundException e) {
return createErrorJsonView(e);
}
}
您可以在此处找到更多详细信息: http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
同样,您应该探索使用@Initbinder来水化和验证模型对象。