#java #spring-boot
#java #spring-boot
Вопрос:
Я должен сопоставить ответ шаблона rest с моим DTO с разными ключами и значениями. в настоящее время я получаю этот ответ json от rest api
{
"access_token": "7ada1efc-f159-42fa-84b9-f15b2a0ee333",
"refresh_token": "1c9f5a71-40ae-4979-90db-088c2aa44123",
"token_type": "bearer",
"scope": null,
"expires_in": 1440
}
И я хочу сопоставить его с моим DTO, чтобы я мог сохранять в БД
@Data
public class AuthIntegrationTokenDto {
private long id;
private int cmsIntegrationId;
private String token;
private String refreshToken;
private String createdBy;
private String lastUpdatedBy;
}
Я хочу, чтобы только один и тот же ключ динамически совпадал с ответом api выше.
В настоящее время я делаю это, но кажется, что я не устанавливаю правильное значение одних и тех же ключей.
ResponseEntity<Object> response = restTemplate.exchange(
url,
HttpMethod.POST,
request,
Object.class,
"client_credentials"
);
Object result = response.getBody();
JSONObject json = new JSONObject((Map) result);
AuthIntegrationTokenDto authIntegrationTokenDto = new AuthIntegrationTokenDto();
for (Object o : json.entrySet()) {
Map.Entry entry = (Map.Entry) o;
authIntegrationTokenDto.setToken(String.valueOf(entry.getValue()));
authIntegrationTokenDto.setRefreshToken(String.valueOf(entry.getValue()));
}
После выполнения этого я получаю нулевые значения в своей БД.
Ответ №1:
Вы неправильно задаете значения для DTO. Сначала вы должны получить ключ, а затем установить его:
for (Object o : json.entrySet()) {
Map.Entry entry = (Map.Entry) o;
if(entry.getKey() == 'access_token') {
authIntegrationTokenDto.setToken(String.valueOf(entry.getValue()));
} else if(entry.getKey() == 'refresh_token') {
authIntegrationTokenDto.setRefreshToken(String.valueOf(entry.getValue()));
}
}
Комментарии:
1. Я обнаружил, что я не устанавливаю свой ключ первым. Благодаря этому.