能否将API请求体以Map变量传入POJO Builder类?
实现方案
当然可以实现,下面提供两种可行的实现方式:
方式一:手动映射Map到Builder
直接遍历Map中的键值对,调用Builder对应的字段设置方法,适合字段数量较少、需要精细控制的场景:
private static Object createPayload(Map<String, String> requestBody) { DemoRequest.DemoRequestBuilder builder = DemoRequest.builder(); // 逐个匹配Map键与Builder字段 if (requestBody.containsKey("demoNumber")) { builder.demoNumber(requestBody.get("demoNumber")); } if (requestBody.containsKey("demoId")) { builder.demoId(requestBody.get("demoId")); } if (requestBody.containsKey("demoName")) { builder.demoName(requestBody.get("demoName")); } if (requestBody.containsKey("batch")) { builder.batch(requestBody.get("batch")); } if (requestBody.containsKey("col")) { builder.col(requestBody.get("col")); } DemoRequest demo = builder.build(); // 保持原逻辑的Map转换输出 ObjectMapper mapper = new ObjectMapper(); Map<String, Object> mapResponse = mapper.convertValue(demo, new TypeReference<>() {}); return mapResponse; // 也可直接返回DemoRequest实例,按需调整 } // Cucumber调用入口方法 public void createPayload(Map<String, String> requestBody) { Object payload = createPayload(requestBody); System.out.println(payload); }
方式二:利用ObjectMapper直接转换Map到POJO
如果你的DemoRequest类配置了完整的Lombok注解(支持Jackson序列化/反序列化),可以省去手动映射的步骤,直接用ObjectMapper完成转换:
首先确保DemoRequest的注解完整:
import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; @Data @Builder @NoArgsConstructor @AllArgsConstructor public class DemoRequest { private String demoNumber; private String demoId; private String demoName; private String batch; private String col; }
然后修改createPayload方法:
private static Object createPayload(Map<String, String> requestBody) { ObjectMapper mapper = new ObjectMapper(); // 直接将Map转换为DemoRequest实例 DemoRequest demo = mapper.convertValue(requestBody, DemoRequest.class); // 保持原逻辑的Map转换输出 Map<String, Object> mapResponse = mapper.convertValue(demo, new TypeReference<>() {}); return mapResponse; } // Cucumber调用入口方法 public void createPayload(Map<String, String> requestBody) { Object payload = createPayload(requestBody); System.out.println(payload); }
注意事项
- 确保Map中的键名与
DemoRequest的字段名完全一致(大小写敏感),否则会出现字段映射失败的情况 - 若Map中缺少部分字段,两种方式都会保留对应字段的默认值(通常为null)
- 如果涉及非String类型的字段,需要手动处理类型转换,或配置ObjectMapper的类型转换规则
内容的提问来源于stack exchange,提问作者Testilla
相关产品推荐
相关产品推荐

