JSR - 349 validación de frijol para Spring @RestController con Spring Boot
Estoy usando Spring Boot 1.5.2.RELEASE y no puedo incorporar JSR - 349 (validación de bean 1.1) para@RequestParam
& @PathVariable
en el método mismo.
Para solicitudes POST, si el parámetro del método es un POJO de Java, entonces se anota ese parámetro con@Valid
está funcionando bien pero anotando@RequestParam
& @PathVariable
con algo como@NotEmpty
, @Email
no funciona.
He anotado clase de controlador con Spring's@Validated
Hay muchas preguntas sobre SO y he comentadoesta respuesta que no funciona para mí
Spring Boot incluye -validation-api-1.1.0.Final.jar
yhibernate-validator-5.3.4.Final.jar
.
¿Me estoy perdiendo algo?
Código de ejemplo,
@RequestMapping(method = RequestMethod.GET, value = "/testValidated", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseBean<String> testValidated(@Email @NotEmpty @RequestParam("email") String email) {
ResponseBean<String> response = new ResponseBean<>();
response.setResponse(Constants.SUCCESS);
response.setMessage("testValidated");
logger.error("Validator Not called");
return response;
}
El siguiente manejador nunca se llama cuando envío valores vacíos o direcciones de correo electrónico mal formadas paraemail
& control siempre va con entestValidated
método.
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseBean handle(ConstraintViolationException exception) {
StringBuilder messages = new StringBuilder();
ResponseBean response = new ResponseBean();
exception.getConstraintViolations().forEach(entry -> messages.append(entry.getMessage() + "\n"));
response.setResponse(Constants.FAILURE);
response.setErrorcode(Constants.ERROR_CODE_BAD_REQUEST);
response.setMessage(messages.toString());
return response;
}
ResponseBean<T>
es mi clase específica de aplicación