You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:25:33