使用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注解的对象只能有一个。因为不能保证多个对象中是否会存在相同的属性名,这是值得注意的一点。