Как использовать @Valid с параметрами @RequestBody Spring MVC?
у меня проблема с использованием @Valid
по параметру метода обработчика на my @Controller
. Мой код выглядит так:
@RequestMapping(value=BIBBLE_BOBBLE_URI_PATTERN + "/widgets", method=RequestMethod.POST)
@ResponseBody
@ResponseStatus(HttpStatus.CREATED)
public Widget saveNewWidget(
@PathVariable final String username,
@PathVariable final String bibbleBobbleName,
@Valid @RequestBody final Widget widget,
final BindingResult results,
final HttpServletRequest request,
final HttpServletResponse response)
здесь Widget
- это класс для одного из объектов моего домена. Я использую @RequestBody
аннотация, чтобы указать, что полезная нагрузка запроса сопоставляется с widget
(в моих тестах запросы JSON, хотя Джексон находится на моем пути к классам, поэтому я также могу использовать XML).
Как видите,BindingResult
параметр следует сразу после
2 ответов
вы используете Spring 3.1? Это недавно добавленная функция в весенней версии 3.1. Пожалуйста, смотрите Проверка Аргументов Метода @RequestBody
это проблема весной 3.0, и она исправлена в 3.1 M2.
https://jira.springsource.org/browse/SPR-6709
Если вы используете spring 3.0, основываясь на некоторых потоках и обширном чтении, вот лучший подход к этой проблеме. Аспект-ориентированный подход, чтобы мы могли отступить при обновлении до версии spring, которая устраняет эту проблему.
аспект, который перехватывает вызовы метода, который использует @RequestMapping аннотация и для каждого параметра, который имеет @ Valid аннотацию на нем, вызовите соответствующий валидатор в аспекте.