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

如何在POJO Builder对象中传递API的ArrayList字段?

嵌套DTO Builder构建错误的解决方案

现有代码的核心问题

  • 参数类型完全错配:方法里定义的myparts是ArrayList,但DTO里DemoPackage的myparts是String;myPackages是ArrayList,但实际需要的是字符串列表,类型和层级都对不上
  • 字段名写错:Builder里调用的releasePackages,但DTO里的目标字段是demoPackages
  • 嵌套对象未正确封装:直接给demoPackages塞单个值,没把myparts和myPackages包装成DemoPackage对象再放进列表

正确的构建实现

先修正方法参数,再按嵌套层级逐步构建对象:

public DemoRequest createMyPayload(String myId, String myFirstName, String myLastName, 
                                   String myparts, List<String> myPackages) {
    // 先构建内层的DemoPackage对象
    DemoRequest.DemoPackage demoPackage = DemoRequest.DemoPackage.builder()
            .myparts(myparts)
            .myPackages(new ArrayList<>(myPackages)) // 转成ArrayList匹配DTO类型
            .build();
    
    // 再构建外层的DemoRequest
    return DemoRequest.builder()
            .myId(myId)
            .myFirstName(myFirstName)
            .myLastName(myLastName)
            .demoPackages(new ArrayList<>(Collections.singletonList(demoPackage))) // 包装成ArrayList
            .build();
}

调用示例(单个package场景):

List<String> packageList = Collections.singletonList("https:/example.com/myPackages/0sk98926-939a-444a-95ta-8eb40125f7r1");
DemoRequest payload = createMyPayload("studentOne", "joe", "bloggs", 
                                     "https://example.com/myparts/a1234567-5d25-9gf1-23ua-45pb3874265l", 
                                     packageList);

复用优化方案

  1. 封装DemoPackage构建工具方法:避免重复编写嵌套对象构建逻辑
private static DemoRequest.DemoPackage buildDemoPackage(String myparts, List<String> myPackages) {
    return DemoRequest.DemoPackage.builder()
            .myparts(myparts)
            .myPackages(new ArrayList<>(myPackages))
            .build();
}

构建DemoRequest时直接调用:

.demoPackages(new ArrayList<>(Collections.singletonList(buildDemoPackage(myparts, myPackages))))
  1. 支持多Package场景:如果需要传入多个DemoPackage,修改方法参数直接接收列表:
public DemoRequest createMyPayload(String myId, String myFirstName, String myLastName, 
                                   List<DemoRequest.DemoPackage> demoPackages) {
    return DemoRequest.builder()
            .myId(myId)
            .myFirstName(myFirstName)
            .myLastName(myLastName)
            .demoPackages(new ArrayList<>(demoPackages))
            .build();
}

额外建议

DTO里的myPackages字段最好指定泛型ArrayList<String>,避免原始类型带来的类型不安全问题:

private ArrayList<String> myPackages;

内容的提问来源于stack exchange,提问作者The man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:25:29