代码之家  ›  专栏  ›  技术社区  ›  Vivek Dhiman

objectmapper readvalue type从linkedhasmap转换为自定义类型

  •  1
  • Vivek Dhiman  · 技术社区  · 5 年前

    下面有一个语句,它给出了LinkedHashMap类型的对象列表。

    List<MyCustomClassA> optionsList = mapper.readValue(mapper.writeValueAsString(OtherClassA.getItems()), List.class);
    

    MyCustomClassA

    @Data
    @Builder
    public class MyCustomClassA {
        private Boolean disabled;
        private Boolean selected;
        private String text;
        private String value;
    }
    

    但它的价值 optionsList 迭代是 LinkedHashMap . OtherClassA.getItems() 返回 List<MyCustomClassB>

    MyCustomClassB

    public class MyCustomClassB {
        private String text;
        private String value;
        Private List<Images> imageList;
    }
    

    我希望达到的目标 选择列表 应该是 MyCustomClassA .

    1 回复  |  直到 5 年前
        1
  •  1
  •   Ryuzaki L    5 年前

    因为你没有提供确切的 TypeReference 这个json字符串需要反序列化。因为你提供了原始类型列表 List.class objectmapper将其视为 List<Object> . 你在反序列化 JsonArray 属于 JsonObject 如此 ObjectMapper 转换为 List<LinkedHashMap> 因为 JSON对象 表示和实现 Map

    List<MyCustomClassA> optionsList = objectMapper.readValue(mapper.writeValueAsString(OtherClassA.getItems()), new TypeReference<List<MyCustomClassA>>(){});
    

    你还需要加上 @NoArgConstructor @AllArgConstructor 上的批注 MyCustomClassA 因为龙目 @Data 只会捆绑 @ToString , @EqualsAndHashCode , @Getter / @Setter @RequiredArgsConstructor