Solucionado (ver solução)
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