【问题标题】:PostMapping Service Rest with Spring boot error Request method 'POST' not supportedPostMapping Service Rest with Spring boot error 不支持请求方法“POST”
【发布时间】:2017-04-27 01:47:06
【问题描述】:

我没有发现问题。

控制器

@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.....");
    }
}

PostMan 客户端

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

记录 Erro PostMan 客户端

{
  "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 注解的方法可以工作

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

【问题讨论】:

  • 在班级级别不需要@RestController @RequestMapping("/api") 吗?
  • 谢谢,是注意力不集中。
  • 根据您的示例,您正在尝试做错事,您正在做得到。发布后您没有在查询参数中发送参数。所以要么做GETMapping,要么修复你的方法来拥有@RequestBody。看这里spring.io/guides/gs/rest-service

标签: java spring spring-boot


【解决方案1】:

你需要在@RestController注解之后在@RequestMapping上设置uri路径,例如:

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

因此,在您的代码中,您在@RestController 中设置了此路径,这就是邮递员请求在没有/api 路径的情况下在“/salvar”上工作的原因,因为对于spring,此路径没有被声明。

【讨论】:

    【解决方案2】:

    您正在将 POST 与 GET 混合使用。 如果您想做 POST,请执行以下操作:

    @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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-03
      • 2020-03-31
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多