Java.util.LinkedHashMap нельзя привести к классу com.profile.model.Profile – Spring Boot

У меня есть микросервисная архитектура, в которой я пытаюсь вызвать другую службу с помощью метода exchange, чтобы получить список профилей пользователей.

@Override
    public List<Profile> getListOfProfile(List<String> receiverId) {
        ListOfProfileDto listOfProfileDto = new ListOfProfileDto();
        listOfProfileDto.setId(receiverId);
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<Object> requestEntity = new HttpEntity<>(listOfProfileDto, httpHeaders);
        try {
            Object foundProfile = restTemplate.exchange(
                    "http://localhost:8087/profile-service/profile/list",
                    HttpMethod.POST,
                    requestEntity,
                    Object.class
            ).getBody();
            return (List<Profile>) foundProfile;

        } 
    }

Когда я получаю этот список в другой части кода, я пытаюсь повторить его.

  receiversProfiles.forEach(rp -> {
            var invitedFriend = InvitedFriends.builder()
                    .firstName(rp.getFirstName())
                    .lastName(rp.getLastName())
                    .build();
            invitedFriendsList.add(invitedFriend);
        });

И вот где я получаю следующую ошибку:

{
    "status": 500,
    "timeStamp": "15/05/2022 15:35:27",
    "message": "class java.util.LinkedHashMap cannot be cast to class com.profile.model.Profile (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; com.profile.model.Profile is in unnamed module of loader 'app')",
    "details": "uri=/profile/save"
}

Когда я получаю ответ от моего другого сервиса, я вижу это:

Java.util.LinkedHashMap нельзя привести к классу com.profile.model.Profile – Spring Boot

Где найден профиль - это hashmap, который я пытаюсь преобразовать в List<Profile> но не в состоянии.

и в этом фрагменте кода, когда я пытаюсь повторить

receiversProfiles.forEach(rp -> {
            var invitedFriend = InvitedFriends.builder()
                    .firstName(rp.getFirstName())
                    .lastName(rp.getLastName())
                    .build();
            invitedFriendsList.add(invitedFriend);
        });

Я предполагаю, что я пытаюсь перебрать хэш-карту, поскольку я перебираю список корыт, и поэтому мой код тормозит.

Как я могу это исправить?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
32
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
 List<Profile> foundProfile = restTemplate.exchange(
              "http://localhost:8087/profile-service/profile/list",
               HttpMethod.POST,
               requestEntity,
               new ParameterizedTypeReference<List<Profile>>() {}
).getBody();

Попробуйте это, чтобы привести к списку Profile при выполнении запроса.

новый ParameterizedTypeReference<List<Profile>>() {}

vincendep 15.05.2022 16:09

Когда Джексон пытается десериализовать объект в JSON, но информация о целевом типе не предоставляется, он будет использовать тип по умолчанию: LinkedHashMap.

Джексон: java.util.LinkedHashMap нельзя преобразовать в X

Другие вопросы по теме