镇江市网站建设_网站建设公司_VPS_seo优化
2026/1/5 17:11:44 网站建设 项目流程

在Feign Client中传递请求体(body)参数,主要有以下几种方式:

1. 基本使用方式

1.1 使用@RequestBody注解

@FeignClient(name = "service-name", url = "${service.url}") public interface MyFeignClient { @PostMapping("/api/user") UserDTO createUser(@RequestBody UserRequest request); }

1.2 完整示例

// 请求体对象 @Data @AllArgsConstructor @NoArgsConstructor public class UserRequest { private String username; private String email; private Integer age; private List<String> roles; } // 响应体对象 @Data public class UserDTO { private Long id; private String username; private String email; } // Feign Client @FeignClient(name = "user-service", url = "http://localhost:8080") public interface UserFeignClient { @PostMapping("/users") UserDTO createUser(@RequestBody UserRequest request); @PutMapping("/users/{id}") UserDTO updateUser(@PathVariable("id") Long id, @RequestBody UserRequest request); @PatchMapping("/users/{id}") UserDTO partialUpdateUser(@PathVariable("id") Long id, @RequestBody Map<String, Object> updates); }

2. 多种参数类型传递

2.1 Map类型参数

@FeignClient(name = "dynamic-service") public interface DynamicFeignClient { @PostMapping("/api/data") String postData(@RequestBody Map<String, Object> data); @PostMapping("/api/search") SearchResult search(@RequestBody SearchCriteria criteria, @RequestParam("page") int page, @RequestParam("size") int size); }

2.2 List类型参数

@FeignClient(name = "batch-service") public interface BatchFeignClient { @PostMapping("/api/batch") BatchResult processBatch(@RequestBody List<BatchItem> items); }

3. 复杂请求示例

3.1 包含请求头的复杂请求

@FeignClient(name = "auth-service") public interface AuthFeignClient { @PostMapping(value = "/oauth/token", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) TokenResponse getToken(@RequestBody MultiValueMap<String, String> formData, @RequestHeader("Authorization") String authorization); }

3.2 文件上传

@FeignClient(name = "file-service") public interface FileFeignClient { @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) UploadResult uploadFile(@RequestPart("file") MultipartFile file, @RequestPart("metadata") @RequestBody FileMetadata metadata); }

4. 配置类配置

4.1 自定义配置

@Configuration public class FeignConfig { @Bean public Encoder feignEncoder() { ObjectFactory<HttpMessageConverters> messageConverters = () -> new HttpMessageConverters(new MappingJackson2HttpMessageConverter()); return new SpringEncoder(messageConverters); } @Bean public Decoder feignDecoder() { return new ResponseEntityDecoder(new SpringDecoder(messageConverters())); } @Bean public Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } }

5. 使用示例

@Service public class UserService { @Autowired private UserFeignClient userFeignClient; public UserDTO createNewUser(String username, String email) { UserRequest request = new UserRequest(); request.setUsername(username); request.setEmail(email); request.setAge(25); request.setRoles(Arrays.asList("USER", "MEMBER")); return userFeignClient.createUser(request); } public String postDynamicData() { Map<String, Object> data = new HashMap<>(); data.put("name", "test"); data.put("value", 123); data.put("items", Arrays.asList("item1", "item2")); return userFeignClient.postData(data); } }

6. 注意事项

  1. JSON序列化:默认使用Jackson,确保对象有正确的getter/setter

  2. Content-Type:默认是application/json,可通过consumes属性修改

  3. 空值处理:默认不序列化null值,可通过配置修改

  4. 编码器/解码器:可自定义处理特定类型

  5. 异常处理:建议使用ErrorDecoder处理异常

7. 常见问题解决

7.1 日期格式处理

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime;

7.2 自定义序列化

@FeignClient(name = "service", configuration = CustomFeignConfig.class) public interface CustomClient { // ... }

7.3 启用GZIP压缩

feign: compression: request: enabled: true response: enabled: true

以上是在Feign Client中传递body参数的完整写法,根据实际需求选择合适的方式。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询