不支持POST请求方法,支持以下GET、 HttpRequestMethodNotSupportedException: Request method ‘POST‘ not supported

不支持POST请求方法,支持以下GET、 HttpRequestMethodNotSupportedException: Request method 'POST' not supported

关于使用feign出现的问题

最近在使用feign的时候发现一些问题,是几个开发时间比较长的同事都不知道的问题,今天记录一下。

feign使用GET方法请求时带的参数为一个实体

/**
     * 服务消费处使用GET方法
     *
     * @param
     * @return
     */
	@GetMapping(value = "/hello")
    @ResponseBody
    public Object hello (Hello hello) {
        Object  list =helloClient.hello(hello);
        return list;
    }
/**
     * 根据实体查询相关数据
     *
     * @param
     * @return
     */
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    Object hello(Hello hello);

服务端接口

/**
    * 查询数据列表
    */
    @GetMapping(value = "/hello")
    public Object hello( Hello hello) {
        log.info("正在执行查询:  req={}",JSON.toJSONString(hello));
        List<Hello > helloList= helloService.listHellos(hello);
        return helloList;
    }

调用接口后出现:
不支持POST请求方法,支持以下GET、

org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported

不支持POST请求方法,支持以下GET、
org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘POST’ not supported

出现这样的错误

原因是feign的中不支持带实体的GET方法,如果带的不是实体,带的是基础类的话就没有问题。

如何解决这个问题

遇到这样的问题时候可以将所有的请求方法可以都改为 POST 就可以解决这个问题

另一个解决方案

但是有时候这样的请求为遵循代码风格或者各种奇怪的需求时 消费端必须为GET方法

/**
     * 根据实体查询相关数据
     *
     * @param
     * @return
     */
    @RequestMapping(value = "/hello",method = RequestMethod.POST)
    Object hello(@RequestBody Hello hello);

服务端接口

/**
    * 查询数据列表
    */
    @PostMapping(value = "/hello")
    public Object hello(@RequestBody Hello hello) {
        log.info("正在执行查询:  req={}",JSON.toJSONString(hello));
        List<Hello > helloList= helloService.listHellos(hello);
        return helloList;
    }

这个解决方法是处了消费端处的接口方法仍旧为GET,其他的地方,从Feign中到服务端都改为POST方法。

接口也是可以正常访问的。

结语

如果对你有帮助可以点赞。
时光荏苒,岁月如梭。
好了,今天的关于feign的小问题就到这里了哦,我非常期待我的下一篇博客尽快上线。

上一篇:学习笔记之IdentityServer4(一)


下一篇:2021-03-09