9.4、请求参数处理
分类: Spring Cloud OpenFeign
请求参数处理
正确处理请求参数是 Feign 客户端的重要功能。本节将学习请求参数处理。
本节将学习:URL 参数、请求体参数、请求头参数、路径变量,以及复杂对象参数。
URL 参数
@RequestParam
@GetMapping("/api/users") List<User> getUsers(@RequestParam String name, @RequestParam Integer age);
可选参数
@GetMapping("/api/users") List<User> getUsers(@RequestParam(required = false) String name, @RequestParam(required = false) Integer age);
默认值
@GetMapping("/api/users") List<User> getUsers(@RequestParam(defaultValue = "") String name, @RequestParam(defaultValue = "0") Integer age);
多个参数
@GetMapping("/api/users") List<User> getUsers(@RequestParam Map<String, Object> params);
请求体参数
@RequestBody
@PostMapping("/api/users") User createUser(@RequestBody User user);
复杂对象
@PostMapping("/api/orders") Order createOrder(@RequestBody OrderDTO orderDTO);
多个请求体
@PostMapping("/api/orders") Order createOrder(@RequestBody OrderDTO orderDTO, @RequestBody AddressDTO addressDTO);
请求头参数
@RequestHeader
@GetMapping("/api/users") List<User> getUsers(@RequestHeader("Authorization") String token);
多个请求头
@GetMapping("/api/users") List<User> getUsers(@RequestHeader("Authorization") String token, @RequestHeader("X-Request-Id") String requestId);
请求头 Map
@GetMapping("/api/users") List<User> getUsers(@RequestHeader Map<String, String> headers);
固定请求头
@FeignClient(name = "user-service", configuration = FeignConfig.class) public interface UserServiceClient { @GetMapping("/api/users") List<User> getUsers(); }
路径变量
@PathVariable
@GetMapping("/api/users/{id}") User getUser(@PathVariable Long id);
命名路径变量
@GetMapping("/api/users/{userId}/orders/{orderId}") Order getOrder(@PathVariable("userId") Long userId, @PathVariable("orderId") Long orderId);
路径变量和参数组合
@GetMapping("/api/users/{id}/orders") List<Order> getUserOrders(@PathVariable Long id, @RequestParam String status);
复杂对象参数
@SpringQueryMap
@GetMapping("/api/users") List<User> getUsers(@SpringQueryMap UserQuery query);
查询对象
public class UserQuery { private String name; private Integer age; private String email; // getters and setters }
嵌套对象
@GetMapping("/api/users") List<User> getUsers(@SpringQueryMap UserQuery query); public class UserQuery { private String name; private AddressQuery address; // getters and setters }
完整示例
综合示例
@FeignClient(name = "user-service") public interface UserServiceClient { // URL 参数 @GetMapping("/api/users") List<User> getUsers(@RequestParam String name, @RequestParam Integer age); // 路径变量 @GetMapping("/api/users/{id}") User getUser(@PathVariable Long id); // 请求体 @PostMapping("/api/users") User createUser(@RequestBody User user); // 请求头 @GetMapping("/api/users/profile") UserProfile getProfile(@RequestHeader("Authorization") String token); // 复杂对象 @GetMapping("/api/users/search") List<User> searchUsers(@SpringQueryMap UserQuery query); // 组合使用 @PutMapping("/api/users/{id}") void updateUser(@PathVariable Long id, @RequestBody User user, @RequestHeader("Authorization") String token); }
官方资源
- Spring Cloud OpenFeign 官方文档:https://spring.io/projects/spring-cloud-openfeign
本节小结
在本节中,我们学习了:
第一个是 URL 参数。 使用 @RequestParam 处理 URL 参数。
第二个是请求体参数。 使用 @RequestBody 处理请求体。
第三个是请求头参数。 使用 @RequestHeader 处理请求头。
第四个是路径变量。 使用 @PathVariable 处理路径变量。
第五个是复杂对象参数。 使用 @SpringQueryMap 处理复杂对象。
这就是请求参数处理。正确处理后,可以灵活地调用各种类型的接口。
在下一节,我们将学习响应处理。