@FeignClient服务之间调用Get请求传递对象参数

使用feign进行服务间调用时,Get请求有多个参数的时候如何使用对象传参呢?

第一步:引入pom依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

第二步:调用方 @FeignClient 端代码示例

@FeignClient(value = "111", fallbackFactory = RemoteFeignFactory.class)
public interface RemoteFeignClient {


    @GetMapping(value = "{apiName}")
    @Headers({"content-type:application/json"})
    DataCenterResponse receiveGet(@PathVariable("apiName") String apiName, @SpringQueryMap DataCenterRequest dataCenterRequest);

}

第三步:被调用方的 Controller 层接口示例

 @GetMapping(value = "/testGet")
    public DataCenterResponse selectListNoPage2(@ModelAttribute  DataCenterRequest dataCenterRequest){
        Map<String,String> map = new HashMap<>();
        User user = new User();
        List<User> users = service.selectList(user);
        DataCenterResponse resp = new DataCenterResponse();
        resp.setCode(200);
        resp.setType("123");
        resp.setMsg("操作成功");
        map.put("list","users");
        resp.setData(map);
        return resp;
    }

说明:

1.被调用方的 Controller 层接口使用@ModelAttribute注解。

2.Fegin调用方需要使用@SpringQueryMap注解进行修饰。

@SpringQueryMap是微服务之间调用,使用openfeign通过get请求方式来处理 多入参(也就是通过实体来传参) 情况的注解,多用于restful风格方式

@SpringQueryMap,简单来说就是将实体转化为表单数据,比如

{
	"username" : "zhangsan",
	"passwd" : "******"
}

通过@SpringQueryMap标注之后呢,会变成这样子
url?username=zhangsan&passwd=******

注意:被@SpringQueryMap注解的对象只能有一个。因为不能保证多个对象中是否会存在相同的属性名,这是值得注意的一点。

猜你喜欢

转载自blog.csdn.net/askuld/article/details/130640133
今日推荐