Получение проверки JSR-303 с размещенным объектом JSON? - PullRequest
2 голосов
/ 10 июня 2011

Я могу сделать так, чтобы Spring преобразовал отправку JSON POST в объект с помощью метода, подобного следующему:

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

Я могу получить проверку JSR-303, настроив всю магию контекста приложения и создав метод post как таковой и отправив с закодированными в форме значениями:

@RequestMapping(value = "/doSomething", method = RequestMethod.POST)
public ResponseEntity<String> doSomething(@Valid SomeUsefulPojo validPojo) {

       // use validPojo, I'm happy
}

Проблема в том, что второй, кажется, хочет использовать подход с кодированной формой, тогда как я хочу передать JSON. Любой способ получить лучшее из обоих миров - валидация И JSON POST? Я пробовал @Valid и @RequestBody вместе, но это не вызывает проверки таким образом.

Идеи

1 Ответ

1 голос
/ 12 июня 2011

Используйте первый подход и подтвердите параметр вручную.

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-группы проверки /

Больше идей здесь:

http://blog.jteam.nl/2009/08/04/bean-validation-integrating-jsr-303-with-spring/

...