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); }

官方资源

本节小结

在本节中,我们学习了:

第一个是 URL 参数。 使用 @RequestParam 处理 URL 参数。

第二个是请求体参数。 使用 @RequestBody 处理请求体。

第三个是请求头参数。 使用 @RequestHeader 处理请求头。

第四个是路径变量。 使用 @PathVariable 处理路径变量。

第五个是复杂对象参数。 使用 @SpringQueryMap 处理复杂对象。

这就是请求参数处理。正确处理后,可以灵活地调用各种类型的接口。

在下一节,我们将学习响应处理。