使用JSON发布对象获取JSR-303验证?

时间:2011-06-10 01:07:39

标签: json spring validation bean-validation

我可以使用以下方法将我的json POST提交转换为对象:

@RequestMapping(value = "/doSomething", method = RequestMethod.POST)
public ResponseEntity<String> doSomething(@RequestBody SomeUsefulPojo usefulPojo) {
       // use the useful pojo, very nice
    }

我可以通过设置所有应用程序上下文魔法,并通过创建我的post方法并使用表单编码值提交来获得JSR-303验证:

@RequestMapping(value = "/doSomething", method = RequestMethod.POST)
public ResponseEntity<String> doSomething(@Valid SomeUsefulPojo validPojo) {

       // use validPojo, I'm happy
}

问题是,第二个似乎想要使用表单编码的方法,而我想要传递JSON。任何方式来获得两全其美 - 验证和json POST?我已经一起尝试了@Valid和@RequestBody,但它没有以这种方式调用验证。

想法?

1 个答案:

答案 0 :(得分:1)

使用第一种方法,并手动验证参数。

import javax.validation.Validator; ...

@Resource
Validator validator;

@RequestMapping(value = "/doSomething", method = RequestMethod.POST)
public ResponseEntity<String> doSomething(@RequestBody SomeUsefulPojo usefulPojo) {
    Set<ConstraintViolation<?>> cvs = validator.validate(usefulPojo);
    if (!cvs.isEmpty()) throw new ConstraintViolationException(cvs);
    ...
}

如果您需要将错误绑定到BindResult,可以尝试这种方法:

http://digitaljoel.nerd-herders.com/2010/12/28/spring-mvc-and-jsr-303-validation-groups/

此处有更多想法:

http://blog.jteam.nl/2009/08/04/bean-validation-integrating-jsr-303-with-spring/