Как сопоставить ответ объекта с другим ObjectDto в java

#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. Я обнаружил, что я не устанавливаю свой ключ первым. Благодаря этому.