前言

最近做微服务架构的项目,在用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的请求方式就说明白了。

Feign服务调用请求方式及参数总结的更多相关文章

  1. Spring Cloud Alibaba(8)---Feign服务调用

    Feign服务调用 有关Spring Cloud Alibaba之前写过五篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring Clo ...

  2. SpringCloud(5)---Feign服务调用

    SpringCloud(5)---Feign服务调用 上一篇写了通过Ribbon进行服务调用,这篇其它都一样,唯一不一样的就是通过Feign进行服务调用. 注册中心和商品微服务不变,和上篇博客一样,具 ...

  3. 百度网盘上下载文件,调用api接口的请求方式和参数

    REST api 功能:下载单个文件. Download接口支持HTTP协议标准range定义,通过指定range的取值可以实现断点下载功能. 例如: 如果在request消息中指定“Range: b ...

  4. SpringCloud系列——Feign 服务调用

    前言 前面我们已经实现了服务的注册与发现(请戳:SpringCloud系列——Eureka 服务注册与发现),并且在注册中心注册了一个服务myspringboot,本文记录多个服务之间使用Feign调 ...

  5. SpringBoot08 请求方式、参数获取注解、参数验证、前后台属性名不一致问题、自定义参数验证注解、BeanUtils的使用

    1 请求方式 在定义一个Rest接口时通常会利用GET.POST.PUT.DELETE来实现数据的增删改查:这几种方式有的需要传递参数,后台开发人员必须对接收到的参数进行参数验证来确保程序的健壮性 1 ...

  6. SpringMVC总结三:请求Controller返回视图类型以及请求方式、参数介绍

    视图解析,请求Controller返回的视图类型: @Controller @RequestMapping("/test") public class TestController ...

  7. Axios 各种请求方式传递参数(非axios api 请求方式)

    get delete 方法较为不同 get请求方式将需要入参的数据作为 params 属性的值,最后整体作为参数传递 delete请求方式将将需要入参的数据作为 data 属性的值,最后整体作为参数传 ...

  8. axios 各种请求方式传递参数

    get delete 方法较为不同 注意:每个方法的传参格式不同,具体用法看下方 get请求方式将需要入参的数据作为 params 属性的值,最后整体作为参数传递 delete请求方式将将需要入参的数 ...

  9. (2).net web api 请求方式与参数

    一.GET 二.POST 如果方法名前缀不带GET 默认为POST请求方法 1.无参数 2.带一个参数 客户端请求时,名称必须为空,不能是dictCategory.不是空的话,会返回空数据 [ ] 3 ...

随机推荐

  1. Day 25 网络基础

    1:网络的重要性: 所有的系统都有网络! 我们的生活已经离不开网络. 运维生涯50%的生产故障都是网络故障! 2:教室这么多的电脑如何上网的? 网卡(mac地址) 有线(双绞线传播电信号)双向,同时收 ...

  2. ReactNative之Redux详解

    用redux有一段时间了,感觉还是有必要把其相关的知识点系统的总结一下的,毕竟好记性不如烂笔头.上篇博客更新了关于<ES6中的迭代器.Generator函数以及Generator函数的异步操作& ...

  3. springboot jsp,过滤器,拦截器

    springboot使用jsp,过滤器,拦截器(拦截器与过滤器区别重点) jsp使用配置 一 创建springboot项目在maven中暂时只添加两个Dependencies :devtools(热部 ...

  4. vue -- vue-cli webpack项目打包后自动压缩成zip文件

    用vue2.0开发项目,使用npm run build 命令 ,但是只会生成dist文件夹,以下是生成zip压缩包方法 1,插件安装 webpack插件安装 filemanager-webpack-p ...

  5. 树莓派3安装ros

    树莓派3上面安装ros总结参考wiki和诸多博客安装ros仍然遇到了很多问题,重装了好几遍才成功,为了自己和其他人以后再安装ros时,不在重蹈覆辙.1.准备和说明树莓派3,安装系统Raspbian j ...

  6. HashMap浅析

    一.概述 HashMap,基于哈希结构的Map接口的一个实现,无序,允许null键值对,线程不安全的.可以使用集合工具类Collections中的synchronizedMap方法,去创建一个线程安全 ...

  7. 【linux】【mysql】mysql8.0开启远程访问及常见问题

    1.连接数据库 [root@localhost ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands e ...

  8. Spring boot 官网学习笔记 - 开发第一个Spring boot web应用程序(使用mvn执行、使用jar执行)

    Creating the POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

  9. Oracle 查询真实执行计划

    什么是真实执行计划 获取Oracle的执行计划,有几种方式.(本文使用Oracle 11g XE版本,以及普通用户scott登录) explain plan for 有两个步骤: explain pl ...

  10. Flume 学习笔记之 Flume NG高可用集群搭建

    Flume NG高可用集群搭建: 架构总图: 架构分配: 角色 Host 端口 agent1 hadoop3 52020 collector1 hadoop1 52020 collector2 had ...