如何在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);
复用优化方案
- 封装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))))
- 支持多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
相关产品推荐
相关产品推荐

