Spring Cloud中远程调用时-OpenFeign如何传递参数呢?
下文笔者讲述SpringCloud中OpenFeign调用时,
传递参数的方法分享
传递参数的方法分享
例: 路径参数、查询参数、请求头参数和请求体参数
1.传递路径参数
路径参数是 URL 路径中的一部分 使用 `@PathVariable` 注解来传递路径参数。例
假设有一个远程服务 `UserService` 其接口如下: // UserService.java @GetMapping("/users/{id}") User getUserById(@PathVariable("id") Long id); 在 OpenFeign 客户端中传递路径参数: // UserServiceClient.java @FeignClient(name = "userService") public interface UserServiceClient { @GetMapping("/users/{id}") User getUserById(@PathVariable("id") Long id); } 使用示例 // UserServiceClient 使用示例 @Autowired private UserServiceClient userServiceClient; public User fetchUser(Long id) { return userServiceClient.getUserById(id); }
2.传递查询参数
查询参数是URL 中 `?key=value` 部分 使用 `@RequestParam` 注解来传递查询参数例
假设有一个远程服务 `UserService` 其接口如下: // UserService.java @GetMapping("/users") list<User> getUsersByAge(@RequestParam("age") int age); 在 OpenFeign 客户端中传递查询参数: // UserServiceClient.java @FeignClient(name = "userService") public interface UserServiceClient { @GetMapping("/users") List<User> getUsersByAge(@RequestParam("age") int age); } 使用示例 //UserServiceClient 使用示例 @Autowired private UserServiceClient userServiceClient; public List<User> fetchUsersByAge(int age) { return userServiceClient.getUsersByAge(age); }
3.传递请求头参数
请求头参数是HTTP请求头中的信息 使用 `@RequestHeader` 注解来传递请求头参数例
假设有一个远程服务 `UserService` 其接口如下 // UserService.java @GetMapping("/users") List<User> getUsersByToken(@RequestHeader("Authorization") String token); 在 OpenFeign 客户端中传递请求头参数 // UserServiceClient.java @FeignClient(name = "userService") public interface UserServiceClient { @GetMapping("/users") List<User> getUsersByToken(@RequestHeader("Authorization") String token); } 使用示例 // UserServiceClient 使用示例 @Autowired private UserServiceClient userServiceClient; public List<User> fetchUsersByToken(String token) { return userServiceClient.getUsersByToken(token); }
4.传递请求体参数
请求体参数通常用于 `POST` 或 `PUT` 请求 使用`@RequestBody`注解来传递请求体参数例
假设有一个远程服务`UserService`
其接口如下// UserService.java @PostMapping("/users") User createUser(@RequestBody User user); 在 OpenFeign 客户端中传递请求体参数: // UserServiceClient.java @FeignClient(name = "userService") public interface UserServiceClient { @PostMapping("/users") User createUser(@RequestBody User user); } 使用示例 // UserServiceClient 使用示例 @Autowired private UserServiceClient userServiceClient; public User createUser(User user) { return userServiceClient.createUser(user); }5.传递多个参数
在某些情况下 您可能需要传递多个参数 包括路径参数、查询参数和请求头参数例假设有一个远程服务 `UserService` 其接口如下: // UserService.java @GetMapping("/users/{id}") User getUserByIdAndToken(@PathVariable("id") Long id, @RequestHeader("Authorization") String token); 在 OpenFeign 客户端中传递多个参数: // UserServiceClient.java @FeignClient(name = "userService") public interface UserServiceClient { @GetMapping("/users/{id}") User getUserByIdAndToken(@PathVariable("id") Long id, @RequestHeader("Authorization") String token); } 使用示例 // UserServiceClient 使用示例 @Autowired private UserServiceClient userServiceClient; public User fetchUser(Long id, String token) { return userServiceClient.getUserByIdAndToken(id, token); }6.传递复杂对象
如果需要传递复杂的对象作为查询参数 可以使用 `@RequestParam` 注解 并结合 `@SpringQueryMap` 注解(需要引入`feign-form`依赖)添加依赖 在 `pom.xml` 中添加 `feign-form` 依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.8.0</version> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.8.0</version> </dependency> 例 假设有一个远程服务 `UserService`,其接口如下: // UserService.java @GetMapping("/users") List<User> getUsersByParams(@RequestParam Map<String, Object> params); 在 OpenFeign 客户端中传递复杂对象: // UserServiceClient.java @FeignClient(name = "userService") public interface UserServiceClient { @GetMapping("/users") List<User> getUsersByParams(@SpringQueryMap Map<String, Object> params); } 使用示例 // UserServiceClient 使用示例 @Autowired private UserServiceClient userServiceClient; public List<User> fetchUsersByParams(Map<String, Object> params) { return userServiceClient.getUsersByParams(params); }7.传递表单数据
如果需要传递表单数据 可使用 `@FormParam` 注解(需要引入 `feign-form` 依赖)。添加依赖 在 `pom.xml` 中添加 `feign-form` 依赖(如果尚未添加): <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.8.0</version> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.8.0</version> </dependency> 例 假设有一个远程服务 `UserService`,其接口如下: // UserService.java @PostMapping("/users") User createUser(@FormParam("name") String name, @FormParam("age") int age); 在 OpenFeign 客户端中传递表单数据: // UserServiceClient.java @FeignClient(name = "userService", configuration = FormEncoderConfiguration.class) public interface UserServiceClient { @PostMapping(value = "/users", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) User createUser(@FormParam("name") String name, @FormParam("age") int age); } // FormEncoderConfiguration.java @Configuration public class FormEncoderConfiguration { @Bean public Encoder feignFormEncoder() { return new SpringFormEncoder(); } } 使用示例 // UserServiceClient 使用示例 @Autowired private UserServiceClient userServiceClient; public User createUser(String name, int age) { return userServiceClient.createUser(name, age); }8.传递路径参数和查询参数
在同一个请求中传递路径参数和查询参数。 例 假设有一个远程服务 `UserService` 其接口如下: // UserService.java @GetMapping("/users/{id}") User getUserByIdAndAge(@PathVariable("id") Long id, @RequestParam("age") int age); 在 OpenFeign 客户端中传递路径参数和查询参数: // UserServiceClient.java @FeignClient(name = "userService") public interface UserServiceClient { @GetMapping("/users/{id}") User getUserByIdAndAge(@PathVariable("id") Long id, @RequestParam("age") int age); } 使用示例 // UserServiceClient 使用示例 @Autowired private UserServiceClient userServiceClient; public User fetchUser(Long id, int age) { return userServiceClient.getUserByIdAndAge(id, age); }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。