不支持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的小问题就到这里了哦,我非常期待我的下一篇博客尽快上线。