Spring Cloud【Finchley】-07Feign构造多参数GET/POST请求

简介: Spring Cloud【Finchley】-07Feign构造多参数GET/POST请求

20190806093230928.jpg

概述

Spring Cloud-06服务消费者整合Feign中将消费者和Feign整合在了一起,示例中Feign客户端接口中的参数只有1个,如下

20181216130541916.png


实际开发中,多个请求非常常见,如果请求参数有多个呢? 我们使用Feign该如何调用请求呢?


调用顺序


20181216131626762.png


当浏览器或者外部其他请求请求到MovieController,MovieController需要调用UserController服务提供者提供的服务,MovieController会通过接口UserFeignClient来实现调用。 在UserFeignClient接口方法里,通过映射UserController的REST API实现调用对端服务。


服务端对外提供的rest风格的请求如下


20181216134545183.png


Feign构造多参数GET请求

我们知道Spring Cloud为Feign添加了Spring MVC的注解支持,那按照Spring MVC那种写法试试?

MovieController中定义一个接受外部请求的方法,映射/movie/getA的请求

@RestController
@Slf4j
public class MovieController {
 @Autowired
 private UserFeignClient userClient;
  @GetMapping("/movie/getA")
  public User findUser(User user) {
    log.info("get进入服务消费者 MovieController.findUser");
    return userClient.finUser(user);
  }
}


在Feign接口中,定义finUser方法,和服务端UserController暴露的url一致

@FeignClient("microservice-provider-user")
public interface UserFeignClient {
  @RequestMapping(method = RequestMethod.GET, value = "/get")
  public User finUser(User user);
}

可以看到 value = “/get” ,和服务提供者的请求url保持一致,这样就能可以调用到该服务。


20181216132613668.png


那试下吧


启动microservice-discovery-eureka微服务,Eureka Server

启动micorservice-provider-user,服务提供者

启动micorservice-consumer-movie-fegin,服务消费者

访问 http://localhost:7901/movie/getA?username=%E5%B0%8F%E5%B7%A5%E5%8C%A0&age=10


传递了2个参数,都是User类的两个属性,按照Spring MVC的逻辑,肯定是可以自动转换的,但这里报错了


20181216132843676.png


尽管我们指定了GET方法,Feign依然会使用POST方法发送请求。

那该如何写呢?


url参数和方法参数一一对应


URL有几个参数,Feign接口中的方法就有几个参数。使用@RequestParam注解指定请求的参数是什么

MovieController层


20181216133217657.png


Feign接口

  /**
   * 
   * @param username
   * @param age
   * @return
   * @desc get的url中有几个参数,Feign接口的方法中就定义几个参数,使用@RequestParam注解指定请求的参数是什么
   *     必须要加上@RequestParam注解,否则启动报错。
   *    
   */
  @RequestMapping(method = RequestMethod.GET, value = "/get")
  public User finUser(@RequestParam("username") String username ,@RequestParam("age") Integer age);


20181216133326306.png


服务提供者保持不变。


启动microservice-discovery-eureka微服务,Eureka Server

启动micorservice-provider-user,服务提供者

启动micorservice-consumer-movie-fegin,服务消费者


访问 http://localhost:7901/movie/getB?username=%E5%B0%8F%E5%B7%A5%E5%8C%A0&age=10


20181216134630635.png

map接收


多参数的URL也可使用Map来构建。当目标URL参数非常多的时候,可使用这种方式简化Feign接口的编写。

MovieController增加个新的方法便于测试

  @GetMapping("/movie/getC")
  public User findUser3(User user) {
    log.info("get2进入服务消费者 MovieController.findUser3");
    Map<String, Object> map = new HashMap<String, Object>() {
      {
        put("username",user.getUsername());
        put("age",user.getAge());
      }
    };
    return userClient.finUser(map);
  }

Feign接口

  /**
   * 
   * @param map
   * @return
   * @desc 使用map来接收get请求的多个参数,@RequestParam不可少
   */
  @RequestMapping(method = RequestMethod.GET, value = "/get")
  public User finUser(@RequestParam Map<String, Object> map);


服务提供者保持不变。


启动microservice-discovery-eureka微服务,Eureka Server

启动micorservice-provider-user,服务提供者

启动micorservice-consumer-movie-fegin,服务消费者


http://localhost:7901/movie/getC?username=%E5%B0%8F%E5%B7%A5%E5%8C%A0xxxx&age=9999

20181216134947136.png

Feign构造多参数POST请求


如何使用Feign构造包含多个参数的POST请求 ?


假设服务提供者的Controller是这样编写的:

@RestController
public class UserController {
  @PostMapping("/post")
  public User post(@RequestBody User user) {
    ...
  }
}


如何使用Feign去请求呢?

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {
  @RequestMapping(value = "/post", method = RequestMethod.POST)
  public User post(@RequestBody User user);
}


用POSTMAN模拟下即可 ,注意Body是JSON格式


20181217190521406.png


实际工作中的使用


20181216135415377.png


源码


https://github.com/yangshangwei/SpringCloudMaster


相关文章
|
25天前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
31 6
|
25天前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
45 5
|
25天前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
35 5
|
27天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
103 2
|
2月前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
50 1
Spring MVC——项目创建和建立请求连接
|
2月前
|
前端开发 Java Spring
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
41 2
|
2月前
|
JSON 前端开发 Java
【Spring】“请求“ 之传递 JSON 数据
【Spring】“请求“ 之传递 JSON 数据
98 2
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
244 2
|
2天前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
9天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
52 14