我有大约50个spring Controller ,可以在响应中返回 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);
}
我的目标是避免为每个 Controller 和进行空检查,为此类情况创建一些通用异常处理程序。
据我了解,重写 HandlerMethodReturnValueHandler Spring 处理程序不是一个好主意。
你有什么想法吗?
谢谢!
最佳答案
对于异常处理程序,您可以使用@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进行水合和验证模型对象。
关于java - 如何在Spring MVC中创建自定义响应处理程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25746965/