`
y806839048
  • 浏览: 1126553 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Feign消费服务时POST/GET请求方式

阅读更多

总体说明:

 

feign消费服务时,以GET方式请求的条件:

 

如果想让服务消费者采用GET方式调用服务提供者,那么需要:

 

1.服务消费者这边feign调用时,在所有参数前加上@RequestParam注解。

 

2.服务消费者这边feign调用时,指明为GET方式(注:如果不指明method,那么在条件1满足的情况下,采用的是默认的GET方式)。

 

注:这里条件1和条件2,是“且”的关系(都满足时,才为GET)。

 

 dubbo的服务调用是通过注入server类(消费方---》服务提供方)(用rest的话是消费方---》消费方),springcloud的服务间的调用直接用feignclient

 

 

feign消费服务时,以POST方式请求的条件:

 

如果想让服务消费者采用POST方式调用服务提供者,那么只需要:

 

1.服务消费者这边feign调用时,在所有参数前加上@RequestParam注解,并指明feign消费服务的方式为POST。

 

2.服务消费者这边feign调用时,有且只有一个参数前为@RequestBody或什么也没有(如果有多个参数,那么其余参数前必须有@RequestParam)。

 

注:这里条件1和条件2,是“或”的关系(当至少一个满足时,即为POST)。

 

注:在服务消费者中,使用feign消费服务时,如果参数前什么也不写,那么默认是由@RequestBody指明的。

 

即:只要不满足GET方式请求,那么POST方式请求是一定支持的。

 

 

 

下面进行详细说明:

 

无参:

 

服务消费者以GET方式请求消费服务的情况(示例):

 

 

 

不指定method,则默认为get,等同于

 

 

 

服务消费者以POST方式请求消费服务的情况(示例):

 

 

 

 

 

单参:

 

服务消费者以GET方式请求消费服务的情况(示例):

 

◎参数前使用了@RequestParam,且指明了用GET方式

 

 

等同于(当所有参数前都有@RequestParam时,这时不指明method,则默认为采用GET方式):

 

 

 

服务消费者以POST方式请求消费服务的情况(示例):

 

◎参数前使用了@RequestParam,且指明了用POST方式

 

 

 

◎参数前未使用@RequestParam或参数前使用了@RequestBody注解(此时不论是否手动指定请求方式、不论指定的方式是POST还是GET,那么最终都以POST方式消费服务)

 

 

 

 

 

 

 

 

 

注:在服务消费者中,使用feign消费服务时,如果参数前什么也不写,那么默认是由@RequestBody指明的。

 

注:@RequestBody注解的参数,需要POST方式才能传递数据。

 

注:在服务提供者的Controller中,

 

如果要接收(服务消费中传过来的)被@RequestBody指明的参数,那么对应方法的对应参数前一定要有@RequestBody;(如果没有的话,收到的参数值就为null;如果写成@RequestParam的话,那么feign调用会失败)

 

如果要接收(服务消费中传过来的)被@RequestParam指明的参数,那么可以写@RequestParam,也可以不写(当服务提供者中对应的参数名字与服务消费者传过来的参数名字一致时,可以不写,不一致时,需要写)

 

 

 

多参:

 

服务消费者以GET方式请求消费服务的情况(示例):

 

如果想让服务消费者采用GET方式调用服务提供者,那么需要:

 

1.服务消费者这边feign调用时,在所有参数前加上@RequestParam注解。

 

2.服务消费者这边feign调用时,指明为GET方式(注:如果不指明method,那么在条件1满足的情况下,默认采用的也是GET方式)。

 

 

等同于

 

 

服务消费者以POST方式请求消费服务的情况(示例):

 

多参数时,如果服务消费者想采用POST进行feign调用,那么:服务消费者中该接口方法里的这些参数前,最多只能有一个参数是@RequestBody指明的,其余的参数必须使用@RequestParam指明。

 

如:

 

 

等同于(String name 这个参数前什么也不写,那么默认的即为@RequestBody)

 

 

 

如果服务消费者这边feign调用时,所有参数前面都使用了@RequestParam注解时,但是指明的是POST方式,那么最终还是以POST方式进行的:

 

 

 

 

服务提供者接收时:

 

◎如果服务消费者传过来参数时,全都用的是@RequestParam的话,那么服务提供者的Controller中对应参数前可以写@RequestParam,也可以不写(当两边参数名字一致时,可以省略不写)

 

 

 

◎如果服务消费者传过来参数时,有@RequestBody的话,那么服务提供者的Controller中对应参数前必须要写@RequestBody(如果是多参数的话,其余参数前视情况可以写@RequestParam,也可以不写)

 

 

 

 注意:如果接口与接口的实现分别处于两个服务中,那么接口就相当于服务消费者,而接口的实现则相当于服务提供者。两者之间仍然满足本文上所述要求。

 

如:

 

服务消费者中的接口是这样的:

 

 

那么对应的服务提供者中的Controller应该是这样的:

 

 

 

实例:

 

 

 

@FeignClient(name= "ONLINELOAN-SIGN-SERVICE")////////uereka注册的服务名---转发时会自动映射成ip--封装了resttmplate,ribbon

public interface SignService {

 

    @RequestMapping(value = "/demo/user1")

    String demo();

 

    @RequestMapping(value = "/contract/autoSignSingle", method = RequestMethod.GET)

    Result<String> autoSignSingle(@RequestParam("source") String source, @RequestParam("channel") String channel,

                                  @RequestParam("userId") Integer userId, @RequestParam("applyId") Integer applyId,

                                  @RequestParam("contractType") String contractType,

                                  @RequestParam(value = "url", required = false) String url,

                                  @RequestParam(value = "forceUpdate", required = false) String forceUpdate);

 

    @RequestMapping(value = "/contract/pushContract", method = RequestMethod.POST)///具体服务方法地址

    Result<String> pushContract(@RequestParam("applyId") Integer applyId);

}

 

调用:

  com.houbank.onlineloan.core.result.Result<String> signResult =     signService.pushContract(offerLoanTask.getApplyId());

 

 

 

 

 

分享到:
评论

相关推荐

    Feign发送Get请求时,采用POJO对象传递参数的最终解决方案.docx

    这意味着当Feign尝试发送包含POJO对象的GET请求时,由于存在请求体,`HttpURLConnection`将请求方法更改为POST,导致服务端处理失败。 #### 解决方案 为了解决上述问题,可以通过以下几种方式来处理: 1. **使用@...

    Spring Cloud如何使用Feign构造多参数的请求

    t", method = RequestMethod.POST) public User post(@RequestBody User user...无论是GET还是POST,或者是更复杂的请求构造,Feign都能轻松应对。理解并熟练运用这些技巧,能够帮助开发者更好地构建健壮的微服务系统。

    SpringCloud Feign服务调用请求方式总结

    SpringCloud Feign服务调用请求方式总结 SpringCloud Feign服务调用请求方式总结主要介绍了Feign服务调用方式的概要,通过示例代码进行了详细的介绍,对大家的学习或者工作具有一定的参考学习价值。 Feign服务...

    SpringCloud服务消费者(Ribbon+Feign)原理及示例

    总的来说,SpringCloud服务消费者的实现方式包括Ribbon和Feign,它们都利用了负载均衡来优化服务调用,提高系统的可用性。理解负载均衡的原理和实现方式对于构建高效、可靠的微服务架构至关重要。在实际应用中,可以...

    feign-consumer例子

    - 添加注解:在接口的方法上添加相应的HTTP请求注解,比如`@GetMapping`用于GET请求,`@PostMapping`用于POST请求,以及`@PathVariable`和`@RequestParam`来处理路径变量和查询参数。 - 使用`@FeignClient`:在...

    Forest - 声明式HTTP客户端框架,让Java发送HTTP/HTTPS请求不再难

    声明式HTTP客户端API框架,让Java发送HTTP/HTTPS...它比OkHttp和HttpClient更高层,是封装调用第三方restful api client接口的好帮手,是retrofit和feign之外另一个选择。通过在接口上声明注解的方式配置HTTP请求接口

    SpringCloud案例(集成了Eureka、Ribbon、Feign)

    1. 定义一个Feign接口,其中的方法对应于HTTP请求的方法(GET、POST等)。 2. 使用`@FeignClient`注解标记接口,指定服务提供者的名称,这将告诉Feign去哪里查找服务。 3. 接口方法上的注解(如`@GetMapping`、`@...

    从零开始学springcloud-Feign附带的示例代码

    1. **Feign客户端定义**:在你的项目中,首先需要创建一个Feign客户端接口,这个接口会定义你需要调用的服务的HTTP方法(GET、POST等)和URL。例如: ```java @FeignClient(name = "服务中心名称", url = "http://...

    springboot_feign:服务消费者(声明式调用)

    这个项目"springboot_feign:服务消费者(声明式调用)"显然是一个关于如何在Spring Boot应用中使用Feign作为服务消费者的示例。 1. **什么是Feign?** Feign是Netflix开源的一个声明式Web服务客户端,它通过提供一种...

    糞坑-SpringCloud中使用Feign的坑

    在SpringCloud生态系统中,Feign是一个非常重要的组件,它提供了声明式的服务调用方式,使得微服务间的通信变得更加简洁。然而,在实际应用中,我们可能会遇到一些“坑”,特别是当涉及到处理复杂请求体,如...

    后端feign学习资料

    1. **声明式接口**:Feign允许开发者定义一个接口,接口方法上的注解用于描述HTTP请求的细节,如URL、方法类型(GET、POST等)、路径参数、查询参数和头部信息。 2. **自动配置**:Feign能够与Spring Boot自动配置...

    spring cloud 之 Feign 使用HTTP请求远程服务的实现方法

    在 Spring Cloud 中使用 Feign,我们可以做到使用 HTTP 请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。 1、添加依赖 在 pom.xml 文件中添加 Feign...

    feign的参数绑定.rar

    Feign允许我们在接口方法上直接定义HTTP请求的方法(GET、POST等)、URL路径、查询参数以及请求头,通过注解将这些信息映射到HTTP请求中。比如,我们可以这样定义一个Feign接口: ```java @FeignClient("example-...

    详解spring cloud Feign使用中遇到的问题总结

    在使用 Feign 时,需要正确处理 POST 请求,否则,会抛出异常,例如:Request method 'POST' not supported。解决方案是,需要正确地配置 POST 请求的方法和参数,例如:@RequestMapping(value="/user/name", method...

    Spring Cloud中关于Feign的常见问题总结

    要使Feign以GET方式发送请求,需要分别使用`@RequestParam`注解每一个参数,如下所示: ```java // 写法1 @FeignClient("microservice-provider-user") public interface UserFeignClient { @RequestMapping...

    Feign makes writing java http clients easier.zip

    接口方法的注解可以用来设置请求方法(GET、POST 等)、URL 路径、请求头和查询参数等信息,这样就使得代码更加整洁和易于维护。 2. **动态代理**: Feign 在运行时会根据接口生成一个实现了该接口的类,这个类会...

    Feign是一个Java到HTTP客户端绑定器

    - **声明式API**: Feign允许开发者定义一个接口,然后通过注解来描述HTTP请求的细节,如URL、HTTP方法(GET、POST等)、路径参数和请求头等。 - **注解支持**: 使用`@RequestMapping`、`@GetMapping`、`@...

    SpringCloud消费者服务提供者

    在这个名为"SpringCloud消费者服务提供者"的项目中,我们看到涉及到的核心是服务消费者的实现以及与服务提供者的远程通信。 首先,`pom.xml`文件是Maven项目的配置文件,它定义了项目的依赖关系、插件和构建过程。...

    Feign 调用其他微服务接口时,url地址匹配错误

    这里的关键在于确保 Feign 客户端的方法注解(如 `@RequestMapping` 或 `@GetMapping`)与被调用服务的方法注解完全一致,包括 URL 路径、请求方法(GET、POST 等)以及内容类型(如 `text/plain` 或 `application/...

    从Eureka到Ribbon、RestTemplate、Hystrix、Feign、zuul一个小例子

    当服务出现故障或响应时间过长时,Hystrix会打开断路器,避免请求涌向故障服务,转而执行备用逻辑,如降级操作。 5. Feign:Feign是一个声明式的Web服务客户端,使得构建HTTP客户端变得更加简单。它允许开发者通过...

Global site tag (gtag.js) - Google Analytics