У меня есть микросервисная архитектура, в которой я пытаюсь вызвать другую службу с помощью метода 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"
}
Когда я получаю ответ от моего другого сервиса, я вижу это:
Где найден профиль - это hashmap, который я пытаюсь преобразовать в List<Profile>
но не в состоянии.
и в этом фрагменте кода, когда я пытаюсь повторить
receiversProfiles.forEach(rp -> {
var invitedFriend = InvitedFriends.builder()
.firstName(rp.getFirstName())
.lastName(rp.getLastName())
.build();
invitedFriendsList.add(invitedFriend);
});
Я предполагаю, что я пытаюсь перебрать хэш-карту, поскольку я перебираю список корыт, и поэтому мой код тормозит.
Как я могу это исправить?




List<Profile> foundProfile = restTemplate.exchange(
"http://localhost:8087/profile-service/profile/list",
HttpMethod.POST,
requestEntity,
new ParameterizedTypeReference<List<Profile>>() {}
).getBody();
Попробуйте это, чтобы привести к списку Profile при выполнении запроса.
Когда Джексон пытается десериализовать объект в JSON, но информация о целевом типе не предоставляется, он будет использовать тип по умолчанию: LinkedHashMap.
новый ParameterizedTypeReference<List<Profile>>() {}