今天调用一个新的微服务时遇到了一个奇怪的问题,明明调用接口上注明了@GetMapping 结果一直报错说不支持post请求
image.png
这个接口用postman以get方式请求是成功的,改成post方式果然也报了这个错误。
对比其他的get请求发现这个出错的请求入参是一个list,而其他的请求都是基本类型,所以怀疑是否feign对这种请求是否有特殊处理,查阅了一下相关文档
https://github.com/spring-cloud/spring-cloud-netflix/issues/1253
发现果然是这样,当接口入参是自定义的类型时,就会被放在RequestBody里面,同时把请求变成了post方式。
这里我是联系同事把接口改为post方式接受请求了,但是如果一定要用get方式的话也是有解决办法的:
把Request 转为 Map<String, Object> map
How to convert a Java object (bean) to key-value pairs (and vice versa)?
最后还是建议这种对象用post方式比较好,毕竟get方式有长度限制...

宝剑锋从磨砺出,梅花香自苦寒来.