如何将单个Java对象转换为对应类型的List集合适配接口多返回场景
方案1:通过Jackson反序列化配置自动适配(最推荐)
你完全不用在实体类里定义两个同别名的字段,只需要给Jackson的ObjectMapper开启ACCEPT_SINGLE_VALUE_AS_ARRAY反序列化特性即可。开启后如果接口返回单个对象,Jackson会自动把它封装成对应泛型的单元素List,直接适配List类型的字段,不需要额外写转换逻辑:
// 配置ObjectMapper ObjectMapper objectMapper = new ObjectMapper(); // 开启单值自动转数组特性 objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
实体类可以简化为只保留List类型字段:
@Data @AllArgsConstructor @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) @JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class) public final class GetCreditCardInfo { @JsonAlias("ns:return") private List<CreditCardDetails> details; }
方案2:基于现有实体类结构手动转换
如果你不想修改Jackson全局配置,要沿用当前写了两个字段的实体类,可以在GetCreditCardInfo类中新增一个统一获取List的方法,后续业务直接调用该方法即可,永远返回List类型:
public List<CreditCardDetails> getSafeDetails() { if (details != null) { return details; } if (detailsObject != null) { return Collections.singletonList(detailsObject); } return Collections.emptyList(); }
方案3:单个对象转List的通用写法
如果只是单纯需要把单个对象转换为对应List,常用写法有以下几种:
- JDK9+ 原生写法:
List<CreditCardDetails> list = List.of(detailsObject); - 全版本兼容写法:
List<CreditCardDetails> list = new ArrayList<>(); list.add(detailsObject);
- Guava工具类写法:
List<CreditCardDetails> list = Lists.newArrayList(detailsObject);
内容的提问来源于stack exchange,提问作者iamjoshua
相关产品推荐
相关产品推荐

