news 2026/5/1 6:02:04

feignclient,参数传body,应该怎么写

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
feignclient,参数传body,应该怎么写

在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参数的完整写法,根据实际需求选择合适的方式。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 3:48:16

Android Profiler实战宝典:揪出CPU耗时元凶与内存泄露小偷

前言 作为Android开发者&#xff0c;我们总能遇到这样的“灵魂拷问”&#xff1a; “APP首页怎么滑着就卡了&#xff1f;”“为什么用了几分钟就报内存溢出&#xff1f;”“明明代码没改多少&#xff0c;怎么性能差了这么多&#xff1f;” 这时候&#xff0c;Android Studio自带…

作者头像 李华
网站建设 2026/4/20 9:39:29

智谱AI再发力:GLM-4.6V-Flash-WEB推动视觉大模型平民化

智谱AI再发力&#xff1a;GLM-4.6V-Flash-WEB推动视觉大模型平民化 在今天的AI应用现场&#xff0c;越来越多的产品团队正面临一个尴尬的现实&#xff1a;明明有多模态大模型的技术突破&#xff0c;却依然“用不起”——不是性能不够&#xff0c;而是跑不快、部署难、成本高。尤…

作者头像 李华
网站建设 2026/4/28 5:27:09

全能对接!强烈安利这9个中转工具,无缝连接从GPT到Claude

张伟的开发团队最近陷入了困境——他们需要同时调用GPT-4、Claude和国内的大模型&#xff0c;却为每个平台不同的接口、密钥管理和计费方式头疼不已。直到他们发现&#xff0c;原来只需要一个工具&#xff0c;就能打通所有主流AI模型。在当今快速发展的AI时代&#xff0c;开发者…

作者头像 李华