问题描述
|
我可以让Spring使用这样的方法将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,但是它没有以这种方式调用验证。
有想法吗?
解决方法
使用第一种方法,然后手动验证参数。
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/