news 2026/3/24 2:33:44

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/3/23 20:06:02

基于深度学习的个性化携程美食数据推荐系统毕设源码+文档+讲解视频

前言 随着在线旅游与本地生活服务的深度融合&#xff0c;携程平台积累的海量美食相关数据亟待高效挖掘&#xff0c;而个性化推荐已成为提升用户体验、增强平台竞争力的关键环节&#xff0c;本课题由此展开研究。当前传统美食推荐方法普遍存在泛化能力薄弱、难以精准捕捉用户复杂…

作者头像 李华
网站建设 2026/3/23 22:21:40

Unity 踩坑记录 命名空间下发送json数据

Json 反序列化这里需要完整类型名&#xff08;包含命名空间&#xff09;&#xff0c;所以导致发送出去的数据会变成命名空间.命名空间下类型名解决方案&#xff1a;1.不要放在命名空间下2.MsgBase msgBase (MsgBase)JsonConvert.DeserializeObject(s, Type.GetType(protoName)…

作者头像 李华
网站建设 2026/3/5 19:18:36

MyBatisPlus整合GLM-4.6V-Flash-WEB后端服务实现图文数据持久化存储

MyBatisPlus整合GLM-4.6V-Flash-WEB后端服务实现图文数据持久化存储 在当今内容爆炸的时代&#xff0c;图像与文本的融合信息正以前所未有的速度增长。从社交媒体到电商平台&#xff0c;从医疗影像到教育资料&#xff0c;系统不仅要“看见”图片&#xff0c;更要“理解”它&…

作者头像 李华
网站建设 2026/3/15 12:37:46

Dify + Pandas协同处理超大Excel(资源占用降低80%的秘密)

第一章&#xff1a;Dify Excel 大文件提取的背景与挑战在现代企业数据处理中&#xff0c;Excel 文件因其易用性和广泛兼容性被大量用于数据存储与流转。然而&#xff0c;随着业务规模扩大&#xff0c;单个 Excel 文件可能包含数十万行数据&#xff0c;甚至达到数百MB大小&#…

作者头像 李华
网站建设 2026/3/10 11:31:48

导师推荐!继续教育必备!8款AI论文平台TOP8测评

导师推荐&#xff01;继续教育必备&#xff01;8款AI论文平台TOP8测评 2026年AI论文平台测评&#xff1a;精准匹配学术需求的工具指南 随着人工智能技术在学术领域的深入应用&#xff0c;越来越多的研究者开始依赖AI工具提升写作效率与质量。然而&#xff0c;面对市场上琳琅满目…

作者头像 李华
网站建设 2026/3/22 2:30:32

代码即权力:DApp如何用一行智能合约改写全球规则?

引言&#xff1a;当“中心化”成为历史&#xff0c;代码开始定义未来2025年的互联网世界&#xff0c;正经历一场静默的革命。传统App的服务器集群逐渐被区块链节点取代&#xff0c;用户数据从中心化数据库迁移至分布式账本&#xff0c;而交易逻辑则由智能合约自动执行——这一切…

作者头像 李华