当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/199991/

相关文章:

  • 深度学习毕设项目:机器学习基于CNN卷积神经网络对辣椒类别识别
  • 基于深度学习的个性化携程美食数据推荐系统毕设源码+文档+讲解视频
  • docker快速部署redis
  • Dify Flask-Restx 接口稳定性优化全记录(从崩溃到高可用的蜕变之路)
  • 基于随机森林算法的Boss直聘数据分析及可视化毕设源码+文档+讲解视频
  • Git commit统计贡献度查看GLM项目参与情况
  • 2026留学中介榜单:北京地区高录取率热门机构强势推荐 - 留学机构评审官
  • Redis的正确打开方式:Java程序员一定要了解!
  • 【Dify触发器兼容性终极指南】:破解跨平台集成难题的5大核心策略
  • 2026上海留学中介TOP10揭晓!高录取率机构强势领衔 - 留学机构评审官
  • gui自动化—1.控制鼠标
  • 杭州代理记账公司收费标准哪家公道?详细对比与分析 - 品牌排行榜
  • 北京TOP留学中介年度观察:服务专业度与成功案例量定真实排名 - 留学机构评审官
  • 2026年企业BI部署方案商深度解析:企业智能BI部署方案商的本地化服务核心价值 - 品牌2026
  • docker快速部署nginx
  • 北京留学中介榜单:5家录取率高口碑机构,选对稳拿offer - 留学机构评审官
  • 2026最新一对一月子服务机构top5推荐榜!服务于广州番禺天河海珠花都增城越秀白云黄埔荔湾等地优质平台及服务商解析/选择指南 - 全局中转站
  • 禁止HTML页面滚动的方法
  • 2026年Deepseek知识库部署厂商、服务商、方案商选择指南:企业AI知识库本地化部署核心路径 - 品牌2026
  • 北京留学中介实力榜:录取率高之选,靠谱机构全揭秘 - 留学机构评审官
  • 2026 年清洁度分析设备制造商权威推荐及选购指南 - 工业仪器权威说
  • docker快速部署minio
  • (Dify 1.11.1稳定性测试全公开):200小时连续运行数据首次披露
  • 为何GLM-4.6V-Flash-WEB成为开发者首选的视觉理解开源模型?
  • 南京留学中介优选榜单揭晓,助力学子海外求学路畅通无阻 - 留学机构评审官
  • 上海留学中介榜单!口碑好,助力学子海外求学路! - 留学机构评审官
  • 【稀缺技术曝光】:Dify流式读取Excel大文件的内部机制首次公开
  • JupyterLab环境下调试GLM-4.6V-Flash-WEB输出结果技巧
  • PyCharm远程解释器配置运行GLM-4.6V-Flash-WEB代码
  • 2025年太古里周边必吃重庆火锅TOP10,聚餐首选!社区火锅/现切牛肉/特色美食/麻辣火锅/火锅/麻辣烫重庆火锅聚餐地点人均价格 - 品牌推荐师