5
respostas

Erro no TopicoForm

Boa tarde!

Estou fazendo o curso antigo ainda e quero concluir ele para depois vir e fazer esse também. Mas estou com um probleminha nele.

Já reassisti o curso umas duas vezes mas não consigo identificar o erro no meu código até agora. Consegui cadastrar o Bean Validation sem problemas, configurar o retorno do erro para mostrar somente onde está o erro ao invés de um JSON gigante tudo mais. O problema aparece na hora que vou testar o código no Postman. Ele me retorna essa mensagem no corpo "Validation failed for object='topicosForm'. Error count: 2",

Aqui está o arquivo topicoForm para ver se tem algo de errado.

package br.com.alura.forum.controller.form;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.Length;

import br.com.alura.forum.controller.repository.CursoRepository;
import br.com.alura.forum.modelo.Curso;
import br.com.alura.forum.modelo.Topico;

public class TopicosForm {

    @NotNull @NotEmpty @Length(min = 5)
    private String titulo;
    @NotNull @NotEmpty @Length(min = 10)
    private String mensagem;
    @NotNull @NotEmpty
    private String nomeCurso;

    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    public String getMensagem() {
        return mensagem;
    }
    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }
    public String getNomeCurso() {
        return nomeCurso;
    }
    public void setNomeCurso(String nomeCurso) {
        this.nomeCurso = nomeCurso;
    }
    public Topico converter(CursoRepository cursoRepository) {
        Curso curso = cursoRepository.findByNome(nomeCurso);
        return new Topico(titulo, mensagem, curso);
    }
}

E também a parte do código no TopicosController.java que configura o retorno do erro

@PostMapping
    public ResponseEntity<TopicoDto> cadastrar(@RequestBody @Valid TopicosForm form, UriComponentsBuilder uriBuilder) {        
        Topico topicos = form.converter(cursoRepository);
        topicoRepository.save(topicos);

        URI uri =  uriBuilder.path("/topicos/{id}").buildAndExpand(topicos.getId()).toUri();
        return ResponseEntity.created(uri).body(new TopicoDto(topicos));
    }
        @GetMapping("/{id}")
        public DetalhesTopicoDto detalhar(@PathVariable Long id) {
            Topico topico = topicoRepository.getReferenceById(id);
            return new DetalhesTopicoDto(topico);
        }
    }

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

5 respostas

Oi!

Manda aqui o JSON que você está enviando na requisição(print da aba body no Postman)

É na parte que faz o teste com os campos em branco, Com os campos preenchidos, ele não dá erro não.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Nesse seu último print deu erro porque você está chamando a URL de editar um tópico, cujo verbo HTTP deve ser PUT e não POST.

Testei no PUT também, mas não deu certo. Apareceu isso aqui Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Agora esse erro é esperado mesmo, pois no json o campo título foi vazio e ele no dto está como @NotEmpty.