Spring MVC中的数据绑定错误处理

时间:2012-07-30 22:23:01

标签: java spring java-ee spring-mvc spring-webflow

我对Spring MVC中的数据绑定有疑问。

我有一个Controller,它接受@RequestBody形式的JSON请求。我已经完成了所有JSR 303验证,它就像一个魅力。

  • JSON请求

    public class TestJSONRequest {
    
        @Size(min=10,message="{invalid.demo.size}")
        String demo;
    
        int code;
    }
    
  • 控制器

    @Controller
    @RequestMapping("/test")
    public class TestController {
    
        public void testEntry(@RequestBody TestJSONRequest jsonRequest,ModelMap map)
    
          Set<ConstraintViolation<TestJSONRequest>> violationList = validator.val(jsonRequest);
          ....
          ....
          TestJSONResponse response = // Do complex Logic.
          modelMap.addattribute("TestJSONResponse",response);
        }
    }
    

但是,一旦传入的JSON数据绑定到Request对象,JSR 303验证就会启动。

如果我在输入JSON请求的代码字段中发送ab,则绑定本身会失败。

我该如何处理?

我想抓住那些数据绑定错误,并在我的控制器中进行某种通用错误处理。

你能帮我解决这个问题吗?

P.S - 我正在使用Spring 3.0.3

1 个答案:

答案 0 :(得分:4)

根据当前的Spring documentation (V3.1)

与@ModelAttribute参数不同,可以使用BindingResult来检查错误,@ RequestBody验证错误总是会导致引发MethodArgumentNotValidException。异常在DefaultHandlerExceptionResolver中处理,它将400错误发送回客户端。

现在你可以通过创建一个新方法告诉Spring你想要处理这个问题,如下所示:

@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleValidation(MethodArgumentNotValidException e, ModelMap map) {
    List<ObjectError> errors = e.getBindingResult() .getAllErrors();
    // your code here...
    return "path/to/your/view";
}

最后,阅读一下Spring文档wrt @ExceptionHandler。那里最有可能是一些有用的信息。