我有大约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/

10-17 01:30