JSR - validação de bean 349 para Spring @RestController com Spring Boot
Estou usando o Spring Boot 1.5.2.RELEASE e não consigo incorporar o JSR-349 (validação de bean 1.1) para@RequestParam
& @PathVariable
no próprio método.
Para solicitações POST, se o parâmetro method for um Java POJO, anotará esse parâmetro com@Valid
está funcionando bem, mas anotando@RequestParam
& @PathVariable
com algo como@NotEmpty
, @Email
não está funcionando.
Anotei a classe do controlador com o Spring@Validated
Existem muitas perguntas sobre SO e eu comentei sobreesta resposta que não está funcionando para mim.
A Bota de Primavera inclui -validation-api-1.1.0.Final.jar
ehibernate-validator-5.3.4.Final.jar
.
Estou faltando alguma coisa?
Código de exemplo
@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;
}
O manipulador abaixo nunca é chamado quando envio valores vazios ou um endereço de email não bem formado paraemail
& controle sempre vai com emtestValidated
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>
é minha classe específica de aplicativo.