Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro 405 - Método get não suportado, mas estou usando Post

Quando tento inserir uma nova empresa a partir do Navegador (http://localhost:8080/gerenciador/novaEmpresa) o TomCat retorna o Status 405. Entretanto, chamando a mesma URL pelo Eclipse (Opção Run o Server) funciona perfeitamente. Segue o código abaixo

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <form action="/gerenciador/novaEmpresa" method="post">
        <label>Nome: </label> <input type="text" name="nome"> <input
            type="submit" name="botaoCadastrar">
    </form>

</body>
</html>

import java.io.IOException; import java.io.PrintWriter;

import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

/**

  • Servlet implementation class NovaEmpresa */ @WebServlet("/novaEmpresa") public class NovaEmpresa extends HttpServlet { private static final long serialVersionUID = 1L;

    @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

     System.out.println("Cadastrando uma nova empresa");
    
     String nomeEmpresa = req.getParameter("nome");
     Banco banco = new Banco();
     banco.adiciona(new Empresa(nomeEmpresa));
    
     PrintWriter saida = resp.getWriter();
     saida.println("<html>");
     saida.println("<body>");
     saida.println("Nova empresa " + nomeEmpresa + " cadastrada" );
     saida.println("</body>");
     saida.println("</html>");        

    } }

package br.com.alura.gerenciador.servlet;

public class Empresa { private Integer id; private String nome;

public Empresa(String nome) {
    this.nome = nome;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

}

package br.com.alura.gerenciador.servlet;

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

public class Banco {

private static List<Empresa> lista = new ArrayList<>();

public void adiciona(Empresa umaEmpresa) {
    lista.add(umaEmpresa);
}

public List<Empresa> getEmpresas() {
    return lista;
}

}

4 respostas

Oi João, tudo bem?

Você criou uma API que trabalha com POST, porém os browsers sempre fazem um GET. Para fazer um POST é necessário utilizar alguma ferramenta, como o POSTMAN: https://www.getpostman.com/

Abraço!

No curso o instrutor apenas mudou o doGet para doPost e incluiu method="post", sem utilizar ferramenta alguma

solução!

Então João,

Para cadastrar uma nova empresa, você precisa acessar /gerenciador/formNovaEmpresa.html

O formulário declarado dentro desse HTML irá fazer um POST para cadastrar uma nova empresa. Você não irá conseguir chamar direto pela URL do browser a URL que o form está chamando, pois o browser só faz requisições GETs, porém o formulário HTML consegue trabalhar com o POST :)

Abraço!

Feito, eu é que estava comendo bola rsss! Obrigado!

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