Spring admite dos métodos de validación diferentes: la validación de Spring y la validación del bean JSR-303. Ambos se pueden usar definiendo un validador Spring que delegue a otros delegadores, incluido el validador de frijoles. Hasta aquí todo bien.
Pero cuando se anotan métodos para solicitar la validación, es otra historia. Puedo anotar así
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {
o así
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {
Aquí, @Valid es javax.validation.Valid y @Validated es org.springframework.validation.annotation.Validated . Los documentos de este último dicen
Variante de JSR-303's Valid, que soporta la especificación de grupos de validación. Diseñado para un uso conveniente con el soporte JSR-303 de Spring, pero no específico para JSR-303.
lo cual no ayuda mucho porque no dice exactamente en qué se diferencia. Como mucho. Ambos parecen funcionar bastante bien para mí.