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


    原文:http://www.itmuch.com/spring-cloud-sum/feign-multiple-params/

    本节来探讨如何使用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);
    }
  • 相关阅读:
    研究生第二学期总结
    Android应用开发EditText文本内容变化监听方法
    Android 自定义动画 Loading
    UML建模之活动图介绍(Activity Diagram)
    UML学习(二)-----类图
    UML系列图--用例图
    Lesson9 some interesting things in C#
    Lesson10 Fianl and fellings
    Lesson 7: C#多线程
    浅谈android Socket 通信及自建ServerSocket服务端常见问题
  • 原文地址:https://www.cnblogs.com/shihaiming/p/10984416.html
Copyright © 2020-2023  润新知