我可以使用以下方法将我的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,但它没有以这种方式调用验证。
想法?
答案 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/