Получение проверки JSR-303 с опубликованным объектом JSON?

Я могу заставить Spring преобразовать мою отправку json POST в объект с помощью такого метода:

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

Я могу получить проверку 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 вместе, но это не вызывает проверку таким образом.

Идеи?


person Dave LeBlanc    schedule 10.06.2011    source источник
comment
Ошибка, по-видимому, исправлена ​​​​в v3.1 M2 [Связанное решение] [1] [1]: stackoverflow.com/a/7811192/41223   -  person tzrlk    schedule 20.08.2012


Ответы (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/

person Peter Davis    schedule 11.06.2011
comment
Хорошо, это подход, который я использовал - рад видеть, что я на правильном пути. - person Dave LeBlanc; 13.06.2011
comment
Это похоже на ошибку Spring, которая не сработала для вас в первый раз. Я не использую JSON, но следую этому шаблону проверки вручную по другим причинам, таким как отсутствие поддержки групп в @Valid в JSR-303. - person Peter Davis; 18.06.2011