【问题标题】:Getting JSR-303 validation with JSON posted object?使用 JSON 发布对象获取 JSR-303 验证?
【发布时间】:2011-06-10 01:07:39
【问题描述】:

我可以让 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,但它并没有以这种方式调用验证。

想法?

【问题讨论】:

标签: json spring validation bean-validation


【解决方案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/

【讨论】:

  • 好的,这就是我所采取的方法 - 很高兴看到我走在正确的轨道上。
  • 它看起来确实像一个 Spring 错误,它第一次对你不起作用。我不使用 JSON,但出于其他原因,例如 JSR-303 缺乏对 @Valid 上的组的支持,我确实遵循了这种手动验证模式。
猜你喜欢
  • 2018-08-24
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 2011-10-30
  • 2018-08-15
相关资源
最近更新 更多