2
respostas

Teste Postman aparece diferente

Primeiro não aparece a opção para criar um tópico no fórun deste curso: SPRING BOOT API REST: CONSTRUA UMA API.

Segundo gostaria de saber o pq do meu teste não estar parecido com o da aula. Abaixo o meu teste.

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

Agora o teste da aula:

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

2 respostas

TopicoForm.java

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

import org.hibernate.validator.constraints.Length;

import br.com.alura.forum.modelo.Curso;
import br.com.alura.forum.modelo.Topico;
import br.com.alura.forum.repositiry.CursoRepository;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;

public class TopicoForm {

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

    @NotNull @NotEmpty @Length (min = 5) 
    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);
    }



}

ErroDeValidacaoHandler

package br.com.alura.forum.config.validacao;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.http.HttpStatus;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class ErroDeValidacaoHandler {

    @Autowired
    private MessageSource messageSource;

    @ResponseStatus(code = HttpStatus.BAD_REQUEST)
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public List<ErroDeFormularioDto> handle(MethodArgumentNotValidException exception) {
        List <ErroDeFormularioDto> dto = new ArrayList<> ();

        List<FieldError> fieldErrors = exception.getBindingResult().getFieldErrors();
        fieldErrors.forEach(e -> {
            String mensagem = messageSource.getMessage(e, LocaleContextHolder.getLocale());
                    ErroDeFormularioDto erro = new ErroDeFormularioDto (e.getField(), mensagem);

        });

        return dto;
    }

}

ErroDeFormularioDto

package br.com.alura.forum.config.validacao;

public class ErroDeFormularioDto {

    String campo;
    String erro;

    public ErroDeFormularioDto(String campo, String erro) {
        this.campo = campo;
        this.erro = erro;
    }

    public String getCampo() {
        return campo;
    }

    public String getErro() {
        return erro;
    }



}

Olá Getúlio! Tudo bem?

Não aparece a opção de criar tópicos no curso que você mencionou porque ele foi regravado, então os novos tópicos devem ser criados na nova versão do curso: https://cursos.alura.com.br/course/spring-boot-3-desenvolva-api-rest-java

Sobre o resultado do Postman, verifica por favor se você adicionou @Valid antes do Topico, no seu método Post, na classe Controller. É essa anotação que chama a validação com o Bean Validation. Se não for isso e quiser compartilhar o seu código no Github pra eu testar, fique à vontade.

Qualquer dúvida, estou à disposição! :)

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software