Как использовать @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 аннотацию на нем, вызовите соответствующий валидатор в аспекте.