46、线程邮箱系统(C语言+多线程通信)
2026/1/5 19:17:51
在Feign Client中传递请求体(body)参数,主要有以下几种方式:
@RequestBody注解@FeignClient(name = "service-name", url = "${service.url}") public interface MyFeignClient { @PostMapping("/api/user") UserDTO createUser(@RequestBody UserRequest request); }// 请求体对象 @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); }@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); }@FeignClient(name = "batch-service") public interface BatchFeignClient { @PostMapping("/api/batch") BatchResult processBatch(@RequestBody List<BatchItem> items); }@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); }@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); }@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; } }@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); } }JSON序列化:默认使用Jackson,确保对象有正确的getter/setter
Content-Type:默认是application/json,可通过consumes属性修改
空值处理:默认不序列化null值,可通过配置修改
编码器/解码器:可自定义处理特定类型
异常处理:建议使用ErrorDecoder处理异常
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime;@FeignClient(name = "service", configuration = CustomFeignConfig.class) public interface CustomClient { // ... }feign: compression: request: enabled: true response: enabled: true以上是在Feign Client中传递body参数的完整写法,根据实际需求选择合适的方式。