news 2026/9/3 4:42:27

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/9/2 21:00:39

基于微信小程序的电子数据取证知识测试系统毕设源码+文档+讲解视频

前言 随着数字经济快速发展&#xff0c;电子数据取证作为司法实践与网络安全领域的核心环节&#xff0c;对专业人才的知识储备与实操能力提出了更高要求。当前电子数据取证知识学习存在测试场景单一、学习便捷性不足、成果反馈不及时等问题&#xff0c;难以满足学习者碎片化学习…

作者头像 李华
网站建设 2026/9/2 21:00:41

docker快速部署nginx

前言记录docker部署nginx部署nginx#创建挂载目录 sudo mkdir -p /zero/nginx/{html,conf.d,log} #分配权限 sudo chmod -R 755 /zero/nginx #启动一个临时nginx docker run -d -p 80:80 --name nginx nginx:1.24.0 # 从容器复制配置文件到新的挂载目录 docker cp nginx:/etc…

作者头像 李华
网站建设 2026/9/2 22:37:28

Markdown流程图描述GLM-4.6V-Flash-WEB架构设计

GLM-4.6V-Flash-WEB 架构解析&#xff1a;从技术落地到高效部署的实践之路 在多模态AI迅速渗透各行各业的今天&#xff0c;一个现实问题始终困扰着开发者&#xff1a;为什么许多视觉语言模型&#xff08;VLM&#xff09;在论文中表现惊艳&#xff0c;却难以真正用起来&#xff…

作者头像 李华
网站建设 2026/9/3 0:19:17

MyBatisPlus分页插件配合GLM-4.6V-Flash-WEB批量处理图像任务

MyBatisPlus分页插件配合GLM-4.6V-Flash-WEB批量处理图像任务 在内容审核、智能标注和自动化图文分析等业务场景中&#xff0c;面对每天动辄数万甚至数十万张图像的处理需求&#xff0c;系统常常陷入“数据库拉不动、模型跑得慢”的双重困境。传统的做法是全量加载任务再逐条处…

作者头像 李华
网站建设 2026/9/3 0:18:14

HTML canvas绘图结果送入GLM-4.6V-Flash-WEB识别

HTML Canvas绘图直连GLM-4.6V-Flash-WEB&#xff1a;构建实时视觉理解闭环 在在线教育平台让学生手绘解题过程、智能白板系统捕捉会议草图、儿童绘画AI辅导工具等场景中&#xff0c;一个共通的技术挑战浮现出来&#xff1a;如何让人工智能“看懂”用户正在绘制的内容&#xff0…

作者头像 李华
网站建设 2026/9/2 21:46:38

基于GLM-4.6V-Flash-WEB的结构化图像信息提取技术研究

基于GLM-4.6V-Flash-WEB的结构化图像信息提取技术研究 在企业数字化转型加速推进的今天&#xff0c;每天都有海量的纸质单据、电子发票、身份证件、合同表单被扫描成图像并上传至业务系统。传统做法是先用OCR识别文字&#xff0c;再通过正则匹配或模板规则提取字段——这一流程…

作者头像 李华