简体   繁体   中英

Data Binding Error Handling in Spring MVC

I have a question about data binding in Spring MVC.

I have a Controller which accepts a JSON request in the form of @RequestBody. I have all the JSR 303 validations in place and it works like a charm.

  • JSON Request

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

     @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); } } 

But JSR 303 validations kick in once the incoming JSON data is bound to the Request object.

If I send ab in the code field of the input JSON request, binding would itself fail.

How do I handle that?

I want to catch those data binding errors and do some kind of generalized error handling in my controller.

Could you please help me out on this?

PS - I am using Spring 3.0.3

According to the current Spring documentation (V3.1) :

Unlike @ModelAttribute parameters, for which a BindingResult can be used to examine the errors, @RequestBody validation errors always result in a MethodArgumentNotValidException being raised. The exception is handled in the DefaultHandlerExceptionResolver, which sends a 400 error back to the client.

Now you can to tell Spring that you'd like to handle this, by creating a new method, as follows:

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

Finally, have a read of the Spring docs wrt @ExceptionHandler . There's most likely some useful information there.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM