5
respostas

Problemas com "nomeCurso", chega sempre "null"

Tudo bom ?

Não estou conseguindo mandar a informação "nomeCurso" pro programa pelo Postman. Quando vou verificar ela vem como "null". Se tento debugar e vejo se o código esta passando pelo "setNomeCurso" ele não passa. No código disponibilizado por vocês funciona e antes de ir pro Controller ele passa por esse caminho. Não notei diferença entre os códigos que possa sinalizar o problema.

Não sei ao certo por onde ele passa antes de ir pro Controller ou por onde chega a mensagem parar poder verificar se esta chegando com todos os campos que envio. Pelo que entendi e lembre é feito pelo Spring através da anotação @RequestBody na classe TopicosController.

O body no Postman:

{
    "titulo":"Duvida Postman",
     "nomeCurso":" Spring Boot ",
    "mensagem":" Boa pergunta"
}
5 respostas

Oi Thales,

Posta aqui o código da sua classe TopicoForm.

Blz? Segue o código como tava:

public class TopicoForm {

    @NonNull @NotEmpty @Size(min = 5)
    private String titulo;
    @NonNull @NotEmpty @Size(min = 5)
    private String mensagem;
///    @NonNull @NotEmpty
    private String nomeCurso;

    public String getNomecurso() {
        return nomeCurso;
    }
    public void setNomecurso(String nomeCurso) {
        this.nomeCurso = nomeCurso;
    }

}

Verificando agora, percebi que o problema estava no get e no set pro "nomeCurso", esta como "Nomecurso" e não "NomeCurso". Se altero funciona. Mas não compreendi de onde ele faz essa chamada, pq mesmo buscando com o CTRL + H não encontro onde ele faz essa relação e pq só aceita com o "get/setNomeCurso".

Ah era isso então o problema.

Quem instancia um objeto TopicoForm e chama os métodos setters para preencher as informações é o próprio Spring, antes de chamar o método no controller.

Bons estudos!

Tem ideia onde ele faz isso? Ou se da pra altera o método que ele vai chama? Não sei nem se há um nome pra esse tipo de recurso/ação que o Spring faz pra realizar uma futura pesquisa. Sou novo trabalhando com Java, mas me parece ser um erro fácil de ocorrer e chato de identifica futuramente. Tá certo que [eu ou o Eclipse hehe] não segui o padrão comumente usado pra nomear esses métodos, mas nem estava enxergando isso.

É um mecanismo automático do Spring chamado de Data Binding.

O que dá para fazer é criar um "Data Binder" customizado, no caso de você precisar converter algum parâmetro para uma classe específica do seu projeto.