@QueryMap 是 Netflix Feign 中的一个注解,用于将一个 Java 对象的属性以查询参数(Query Parameter)的形式添加到 HTTP 请求的 URL 中。
在进行 RESTful API 调用时,如果需要传递多个查询参数,使用这个注解可以方便地将一个对象的属性自动转换为查询参数,而不需要手动拼接 URL 字符串。这有助于保持代码的整洁性和可读性,同时减少因手动拼接参数而可能出现的错误。
定义一个查询服务,该服务接收 id、name 和 age 查询参数,然后通过 @QueryMap 注解将 POJO 对象的属性批量传递给查询服务。步骤如下:
(1)定义 User 实体
@Data @Builder @ToString public class User { private Long id; private String name; private Integer age; }
(2)查询服务
@GetMapping("/query") public User query(@RequestParam("id") Long id, @RequestParam("name") String name, @RequestParam("age") Integer age) { return User.builder().id(id).name(name).age(age).build(); }
(3)定义 Feign 客户端,通过 @QueryMap 将 User 查询参数的属性自动添加到 URL 的查询参数:
@RequestLine("GET /simple/query") User query(@QueryMap User user);
(4)调用 Feign 客户端
@GetMapping("/") public String index() { return SimpleFeign.createJson().query(User.builder().id(100L).name("Tom").age(20).build()).toString(); }
输出结果如下: