如何在Spring MVC中创建自定义响应处理程序?

时间:2014-09-09 14:17:33

标签: java spring-mvc error-handling

我有大约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 弹簧处理程序,这不是一个好主意。

你有什么想法吗?

谢谢!

1 个答案:

答案 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来水化和验证模型对象。