Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

@Valid não está enviando o erro para o postman

Olá, eu estava construindo uma opção própria e construi o POST certinho (tirando a utlização do Form) e o @Valid está funcionando, mas o erro está sendo impresso no console.

  • Meu Model:
@NotNull
@NotEmpty
@Column(name = "nome")
private String nome;
  • Meu POST do Controller:
private static final String URL_PLURAL = "/templates";

@PostMapping(value = URL_PLURAL, produces = MediaType.APPLICATION_JSON_VALUE)
@ApiModelProperty("Cria um novo template")
    public ResponseEntity<TemplateDTO> cadastraTemplate(@RequestBody @Valid TemplateDTO templateDTO, UriComponentsBuilder uriComponentsBuilder) {
        Template template = Template.desconvertId(templateDTO);
        templateRepository.save(template);
        URI uri = uriComponentsBuilder.path("template/{id}").buildAndExpand(template.getId()).toUri();
        return ResponseEntity.created(uri).body(new TemplateDTO(template));
    }
  • Ele está validando corretamente, mas a mensagem está indo para o meu console da IDE:
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='não deve estar vazio', propertyPath=nome, rootBeanClass=class com.ages.joinfut.Model.Template, messageTemplate='{javax.validation.constraints.NotEmpty.message}'}
]] with root cause

e no Postman me responde assim:

{
    "timestamp": "2022-08-24T19:03:59.295+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "path": "/example/templates"
}
2 respostas
solução!

Oi Liliane,

Acredito que é porque você adicionou as anotações do bean validation na entidade, ao invés de adiconar na classe dto, e seu controller recebe como parâmetro um objeto DTO e não a entidade.

Com isso o Spring não executa a validação, mas a JPA sim vai executar as validações quando a entidade for persistida no banco(no seu caso quando essa linha for chamada: templateRepository.save(template);)

Por isso o erro é impresso no console, pois quem está validando é a JPA e não o Spring.

Muito obrigado rodrigo, funcionou agora :)