ObjectMapper readValue类型从LinkedHasMap转换为自定义类型

时间:2019-09-22 14:13:55

标签: java

我在下面有一条语句,该语句为我提供了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;
}

要获得optionsList类型应该是MyCustomClassA的我想要实现的目标。

1 个答案:

答案 0 :(得分:1)

因为您没有提供确切的TypeReference JSON字符串需要反序列化。由于您提供了原始类型列表List.class,因此objectmapper将其视为List<Object>。并且您要对JsonArray中的JsonObject进行反序列化,因此ObjectMapper会转换为List<LinkedHashMap>,因为JsonObject表示并实现了Map

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

此外,您还需要在@NoArgConstructor上添加@AllArgConstructorMyCustomClassA注释,因为龙目岛@Data仅捆绑了@ToString,{{1} },@EqualsAndHashCode@Getter / @Setter