ObjectMapper readValue Тип Преобразование из LinkedHasMap в пользовательский тип - PullRequest
3 голосов
/ 22 сентября 2019

У меня есть заявление ниже, которое дает мне список объектов, которые имеют тип 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 Ответ

1 голос
/ 22 сентября 2019

Поскольку вы не предоставляете точную TypeReference, которую нужно десериализовать для строки json.Так как вы предоставили необработанный список типов List.class объектный преобразователь обрабатывает его как List<Object>И вы десериализуете JsonArray из JsonObject, поэтому ObjectMapper преобразуется в List<LinkedHashMap>, потому что JsonObject представляет и реализует Map

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

А также вам нужно добавить @NoArgConstructor и@AllArgConstructor аннотация на MyCustomClassA, потому что lombok @Data объединит только функции @ToString, @EqualsAndHashCode, @Getter / @Setter и @RequiredArgsConstructor

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...