Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
20
respostas

Retorno do Postman 400 Bad Request

Ao realizar o POST via Postman, a aplicação retorna 400 Bad Request.

20 respostas

Oi Rodrigo,

Verifica o json que você está enviando no corpo da requisição se está correto e também o cabeçalho content-type.

{
    "titulo": "Dúvida Postman",
    "mensagem": "Texto da Mensagem",
    "nomeCurso": "Spring Boot"
}

Content-Type - application/json

Opa Rodrigo, belezaa?

Poderia postar o fonte do seu projeto (service e controller)? Vc está usando Bean-Validation?

No aguardo

package br.com.alura.forum.controller;

import java.net.URI;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriBuilder;
import org.springframework.web.util.UriComponentsBuilder;

import br.com.alura.forum.controller.dto.TopicoDto;
import br.com.alura.forum.controller.form.TopicoForm;
import br.com.alura.forum.modelo.Topico;
import br.com.alura.forum.repository.CursoRepository;
import br.com.alura.forum.repository.TopicoRepository;

@RestController
@RequestMapping("/topicos")
public class TopicosController {

    @Autowired
    private TopicoRepository topicoRepository;

    @Autowired
    private CursoRepository cursoRepository;

    @GetMapping
    public List<TopicoDto> lista(String nomeCurso) {
        if(nomeCurso == null) {
            List<Topico> topicos = topicoRepository.findAll();            
            return TopicoDto.converter(topicos);            
        } else {
            List<Topico> topicos = topicoRepository.findByCursoNome(nomeCurso);            
            return TopicoDto.converter(topicos);
        }
    }

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

        URI uri = uriBuilder.path("/topicos/{id}").buildAndExpand(topico.getId()).toUri();
        return ResponseEntity.created(uri).body(new TopicoDto(topico));


    }

}

Não tem camada de serviço ainda.

Rodrigo,

Posta a exception completa aqui.

<!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad Request</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size: 22px;
} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size: 16px;
} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size: 14px;
} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;
} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;
} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size: 12px;
} a {color:black;
} a.name {color:black;
} .line {height: 1px;background-color:#525D76;border:none;
}</style></head><body><h1>HTTP Status 400 – Bad Request</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).</p><hr class="line" /><h3>Apache Tomcat/9.0.17</h3></body></html>

No console do Eclipse imprimiu a stack trace da exception? posta aqui tambem.

Não imprimiu exceção nenhuma no console do Eclipse!

Estranho então, porque o código do seu controller está ok.

Posta aqui o código da sa classe TopicoForm e verifica no Postman se está tudo certinho.

Aba Headers com cabeçalho Content-Type marcado:

Aba Body com opção raw marcada e json da requisição:

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

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

public class TopicoForm {

    private String titulo;
    private String mensagem;
    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);
    }

Opa Rodrigo, tudo bem?

Concordo com o professor, que loucura!!!

Poderia enviar o link do seu código do Github?

Se não estiver no Github pode enviar para este email thiagopaschoal076@gmail.com

Que estranho!

Rodei aqui e funcionou sem problema nenhum. Tente rodar mais uma vez pf e vamos ver se o problema persiste.

Um ponto, poderia mostrar como está a configuração do seu Postman tbm?

No aguardo

Eu não consigo colar print aqui

Pode mandar por aqui brow!

https://imgbb.com/

solução!

Pode entrar aqui man?

https://meet.google.com/ojb-rkoz-rap

Aconteceu a mesma coisa cmg! Poderiam postar como resolveram?

Console eclipse: at [Source: (PushbackInputStream); line: 6, column: 2]] 2021-05-27 21:12:06.130 WARN 29841 --- [nio-8080-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('}' (code 125)): was expecting double-quote to start field name; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('}' (code 125)): was expecting double-quote to start field name at [Source: (PushbackInputStream); line: 6, column: 2]] 2021-05-27 21:13:54.275 WARN 29841 --- [nio-8080-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('}' (code 125)): was expecting double-quote to start field name; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('}' (code 125)): was expecting double-quote to start field name at [Source: (PushbackInputStream); line: 6, column: 2]] 2021-05-27 21:17:17.574 WARN 29841 --- [nio-8080-exec-9] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('}' (code 125)): was expecting double-quote to start field name; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('}' (code 125)): was expecting double-quote to start field name at [Source: (PushbackInputStream); line: 5, column: 2]]

Olá Watson, tudo bem com vc?

Então brow, a solução que chegamos foi executar a requisição em outra ferramenta (Insomnia) sem ser o Postman. Era algum problema no Postman que ainda não identificamos o que era. Mas vamos analisar o seu problema!

Analisando o log, parece ter um erro de sintaxe no seu JSON. Isso é uma requisição POST, GET? Poderia postar o seu código onde vc monta o JSON?

[org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('}' (code 125)): was expecting double-quote to start field name;

No aguardo