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

问题描述

| 我可以让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/     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...