有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

不支持java PostMapping服务Rest和Spring引导错误请求方法“POST”

我没有发现问题所在

控制器

@RestController("/api")
public class CoordenadaController {

    @Autowired private RepositorioCoordenada repositorioCoordenada;

    @PostMapping("/salvar")
    public void save(String nome, int coordenadaX, int coordenadaY) {
        this.repositorioCoordenada.save(new Coordenada(nome, coordenadaX, coordenadaY));
        System.out.println("Salvou.....");
    }
}

邮差客户

urllocalhost:8080/api/salvar?nome=Igreja&coordenadaX=10&coordenadaY=20

记录Erro邮递员客户

{
  "timestamp": 1493257315171,
  "status": 405,
  "error": "Method Not Allowed",
  "exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
  "message": "Request method 'POST' not supported",
  "path": "/api/salvar"
}

日志错误春天

Request method 'POST' not supported
2017-04-26 22:41:55.168  WARN 8388 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported

如果删除@RestController中的/api,则使用@Post works注释的方法

localhost:8080/salvar?nome=Igreja&coordenadaX=10&coordenadaY=20

共 (2) 个答案

  1. # 1 楼答案

    您需要在@RestController注释之后设置@RequestMapping上的uri路径,例如:

    @RestController
    @RequestMapping("/yourpath")
    public class YourClass {
      ...
      ...
    }
    

    所以,在您的代码中,您在@RestController中设置了这个路径,这就是为什么postman请求在没有/api路径的“/salvar”上工作的原因,因为对于spring,这个路径没有声明

  2. # 2 楼答案

    你把POST和GET混为一谈。 如果您想发布,请执行以下操作:

    @RestController("/api")
    public class CoordenadaController {
    
    @Autowired private RepositorioCoordenada repositorioCoordenada;
    
    @PostMapping("/salvar")
    public void save(@RequestBody Payload payload) {
        this.repositorioCoordenada.save(new Coordenada(payload.nome, payload.coordenadaX, payload.coordenadaY));
        System.out.println("Salvou.....");
    }
    

    }

    public class Payload{
    String nome, int coordenadaX, int coordenadaY
    
    //getters & setters
    }
    

    然后相应地使用postmant:使用post方法,创建一个json负载,并将其添加到Body部分

    json有效负载:

    {
        "nome": "bla bla",
        "coordenadaX": "1",
        "coordenadaY": "2"
    }
    

    您可以查看spring教程以了解更多信息:https://spring.io/guides/gs/rest-service/