SpringCloud Feign服务调用请求方式总结
前言
最近做微服务架构的项目,在用feign来进行服务间的调用。在互调的过程中,难免出现问题,根据错误总结了一下,主要是请求方式的错误和接参数的错误造成的。在此进行一下总结记录。以下通过分为三种情况说明,无参数,单参数,多参数。每种情况再分get和post两种请求方式进行说明。这样的话,6种情况涵盖了feign调用的所有情况。
有个建议就是为了保证不必要的麻烦,在写feign接口的时候,与我们的映射方法保持绝对一致,同时请求方式,请求参数注解也都不偷懒的写上。如果遵循这种规范,可以避开90%的调用错误。
无参情况
无参情况就是说我们的方法内不接收参数。
Get请求
当我们只写RequestMapping,而不指定RequestMethod的时候。默认的method为一个get请求。
@RequestMapping("/noArgs/getDemo") public void noArgsGetDemo();
Post请求
@RequestMapping(value = "/noArgs/postDemo",method = RequestMethod.POST) public void noArgsPostDemo();
也可以直接使用PostMapping
@PostMapping(value = "/noArgs/postDemo") public void noArgsPostDemo();
单个参数的情况
方法内只有一个参数
Get请求
get请求方式接参,只能使用RequestParam注解
@RequestMapping(value = "/singleArg/getDemo") public void singleArgGetDemo(@RequestParam String name);
不写RequestMethod注解,默认就是get请求。
Post请求
post请求方式接参,可以使用三种方式,一种是不写,一种是RequestParam,一种是RequestBody。
RequestParam
先说说RequestParam这种方式。需要指明method,如果不指明则和上方一样了。默认是get。
@RequestMapping(value = "/singleArg/PostDemo",method = RequestMethod.POST) public void singleArgPostDemo(@RequestParam String name);
RequestBody
一旦使用RequestBody这种方式,他就是post请求,不用写method了。
@RequestMapping(value = "/singleArg/PostDemo") public void singleArgPostDemo(@RequestBody String name);
这个注解就很强势了,你写post,不写或者写get都没用,不会生效的,只要有这个方式那他就是Post请求了。
啥也不写
@RequestMapping(value = "/singleArg/PostDemo") public void singleArgPostDemo(String name);
此时默认会在参数前加上RequestBody注解。然后就会变成Post请求。
多参
get请求
多个参数也是使用@RequestParam注解。
@RequestMapping(value = "/moreArgs/getDemo") public void moreArgGetDemo(@RequestParam String name,@RequestParam String sex);
使用了RequestParam注解,默认method就是get。
post请求
多个参数只能有一个是requestBody方式,其他应该使用requestParam方式。
@RequestMapping(value = "/moreArgs/postDemo") public void moreArgPostDemo(@RequestBody String name,@RequestParam String sex);
也可以全部使用RequestParam方式,但是要指定post。
@RequestMapping(value = "/moreArgs/postDemo",method = RequestMethod.POST) public void moreArgPostDemo(@RequestParam String name,@RequestParam String sex);
如果要是参数前,都没写注解,则会报错,因为会默认加上两个RequestBody。
总结
至此feign的请求方式就说明白了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
基于注解的springboot+mybatis的多数据源组件的实现代码
这篇文章主要介绍了基于注解的springboot+mybatis的多数据源组件的实现,会使用到多个数据源,文中通过代码讲解的非常详细,需要的朋友可以参考下2021-04-04Java中HashTable和HashMap的区别_动力节点Java学院整理
HashTable和HashMap主要的区别有:线程安全性,同步(synchronization),以及速度。接下来通过本文给大家简单介绍下HashTable和HashMap的区别,需要的的朋友参考下吧2017-04-04解决SpringMvc后台接收json数据中文乱码问题的几种方法
本篇文章主要介绍了解决SpringMvc后台接收json数据中文乱码问题的几种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-01-01SpringCloud Gateway自定义filter获取body中的数据为空的问题
这篇文章主要介绍了SpringCloud Gateway自定义filter获取body中的数据为空,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-10-10
最新评论