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

本节来探讨如何使用Feign构造多参数的请求。笔者以GET及POST请求为例讲解,其他方式(例如DELETE、PUT等)的请求原理相通,读者可自行研究。

GET请求多参数的URL

假设需请求的URL包含多个参数,例如http://microservice-provider-user/get?id=1&username=张三 ,该如何使用Feign构造呢?

我们知道,Spring Cloud为Feign添加了Spring MVC的注解支持,那么我们不妨按照Spring MVC的写法尝试一下:

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

然而,这种写法并不正确,控制台会输出类似如下的异常。

feign.FeignException: status 405 reading UserFeignClient#get0(User); content:
{"timestamp":1482676142940,"status":405,"error":"Method Not Allowed","exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method 'POST' not supported","path":"/get"}

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

正确写法如下

方法一

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/get", method = RequestMethod.GET)
 public User get1(@RequestParam("id") Long id, @RequestParam("username") String username);
}

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

方法二

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

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/get", method = RequestMethod.GET)
 public User get2(@RequestParam Map<String, Object> map);
}

在调用时,可使用类似以下的代码。

public User get(String username, String password) {
 HashMap<String, Object> map = Maps.newHashMap();
 map.put("id", "1");
 map.put("username", "张三");
 return this.userFeignClient.get2(map);
}

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);
}

配套代码

TIPS

  • 除本节讲解的方式外,我们也可编写自己的编码器来构造多参数的请求,但这种方式编码成本较高,代码可重用性较低,故此不再赘述。

拓展阅读

相关文章

本文链接如何使用Feign构造多参数的请求

转载声明:本博客由周立创作,采用 CC BY 3.0 CN 许可协议。可自由转载、引用,但需署名作者且注明文章出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本节我们来探讨如何使用Feign构造多参数的请求。笔者以GET以及POST方法的请求为例进行讲解,其他方法(例如D...
    周立_itmuch阅读 3,076评论 0 1
  •  通过前面两章对Spring Cloud Ribbon和Spring Cloud Hystrix的介绍,我们已经掌...
    Chandler_珏瑜阅读 213,847评论 15 140
  • 经过前文讲解,我们已使用Eureka实现服务发现;使用Ribbon实现了负载均衡这种听起来很高端的东西。我们的架构...
    周立_itmuch阅读 939评论 1 7
  • 坚强,是孤单的代名词 是忧伤的近义词 当你期许的以预料不到的方式呈现时 时光是静止的 心也没有预想中的释然 当你期...
    朴素少年_大美阅读 172评论 0 0
  • 这几天我发现现在来店的车主,好多都是家里有好几辆车的,平时我们也不应该去挑车拣活,因为你永远也不知道谁会为你的服务...
    王佳欢雪阅读 100评论 0 0