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

Java 如何在SpringMVC中创建自定义响应处理程序?,java,spring-mvc,error-handling,Java,Spring Mvc,Error Handling,我有大约50个spring控制器,可以在响应中返回null。像这样: @RequestMapping(value = "/someUrl.controller", method = RequestMethod.GET) public @ResponseBody Object getObject(@RequestParam("id") Long id) { Object object = provider.getObject(id); if (object == null ) {

我有大约50个spring控制器,可以在响应中返回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);
}
我的目标是避免对每个控制器进行空检查,并为此类情况创建一些通用异常处理程序

据我所知,重写HandlerMethodReturnValueHandlerspring处理程序不是一个好主意

你有什么想法吗


谢谢

对于异常处理程序,您需要一个@ControllerAdvice对象,并在那里注册处理程序:

@ControllerAdvice
class GlobalControllerExceptionHandler {


    @ResponseStatus(HttpStatus.NOT_FOUND) 
    @ExceptionHandler(EntityNotFoundException.class)
    public @ResponseBody ExceptionDetails handleEntityNotFound(EntityNotFoundException e) {
        return createErrorJsonView(e);
    }

}
您可以在此处找到更多详细信息:


类似地,您应该探索使用@Initbinder来水合和验证模型对象。

您可以在
provider.getObject(id)
函数中执行空检查,并从那里抛出异常。这个
@ExceptionHandler
有什么问题?还是您不想重构所有处理程序以抛出
EntityNotFoundException
?在某些情况下,您应该考虑返回<代码> null <代码>是有效的。实际上,我想在返回null时总是应该处理这样的情况,因为Spring将这个null转换为空响应。事实上,我对jquery库有一些问题,因为它希望得到一些可以解析的东西。Mo的目标是避免在所有控制器中进行空检查。在这种情况下,我可以使用@ControllerAdvice注释创建一些通用的错误处理程序。因此,我无法在provider.getObject(id)函数中处理这种行为。实际上,我知道如何创建全局处理程序,问题是如何避免在所有控制器中进行空检查。