Java Spring WebClient, как получить атрибут из ответа тела и установить для данного класса?
Я пытаюсь использовать данный API, который возвращает такой ответ тела:
"access_token": "xkeo94s4qviHSTDIuTCbgRQSeNfrrMamiCN0w6wu",
"token_type": "Bearer",
"expires_in": 9600,
"refresh_token": "PpF0LfLPmdsm9FJFu4YmDBPENqTwGQIqQjw8MqOP"
Итак, я создал следующий класс:
@JsonIgnoreProperties(ignoreUnknown = true)
public class EHTLToken {
private String access_token;
private String token_type;
private String expires_in;
private String refresh_token;
// getters and setters
Я могу сделать запрос и получить ожидаемое тело ответа с помощью следующего кода:
@Test
void getTokenTest() {
String uri = "/oauth/access_token";
EHTLClient client = new EHTLClient();
Credenciais credenciais = new Credenciais();
RequestHeadersSpec<?> request = client.getWebClient().method(HttpMethod.POST).uri(uri).bodyValue(credenciais);
String response = request.retrieve().bodyToMono(String.class).block();
System.out.println(response);
}
Но когда я пытаюсь получить ответ на EHTLToken.class и получить его атрибуты, создается экземпляр класса, но все его атрибуты равны нулю. Вот что я пытаюсь:
@Test
void getTokenTest() {
String uri = "/oauth/access_token";
EHTLClient client = new EHTLClient();
Credenciais credenciais = new Credenciais();
RequestHeadersSpec<?> request = client.getWebClient().method(HttpMethod.POST).uri(uri).bodyValue(credenciais);
EHTLToken response = request.retrieve().bodyToMono(EHTLToken.class).block();
Assert.notNull(response, "Class is null.");
Assert.notNull(response.getAccessToken(), "Token is null.");
}
Мой второй тест не удался:
java.lang.IllegalArgumentException: Token is null.
at org.springframework.util.Assert.notNull(Assert.java:198)
at br.com.ribeiro.fernando.ehtl.EhtlApplicationTests.getTokenTest(EhtlApplicationTests.java:27)
Я неправильно понимаю концепцию bodyToMono()? Как я могу получить атрибуты из тела ответа и установить для данного класса с помощью WebClient, пожалуйста?
С уважением.
1 ответ
Для всех, у кого есть эта проблема, моя проблема в том, что REST API дает такой ответ:
"access_token": "xkeo94s4qviHSTDIuTCbgRQSeNfrrMamiCN0w6wu",
"token_type": "Bearer",
"expires_in": 9600,
"refresh_token": "PpF0LfLPmdsm9FJFu4YmDBPENqTwGQIqQjw8MqOP"
И я создал POJO со следующими атрибутами:
private String access_token;
private String token_type;
private String expires_in;
private String refresh_token;
Мой тест работал, когда я изменил свой POJO на это:
@JsonIgnoreProperties(ignoreUnknown = true)
public class EHTLToken {
@JsonProperty("access_token")
private String accessToken;
@JsonProperty("token_type")
private String tokenType;
@JsonProperty("expires_in")
private String expiresIn;
@JsonProperty("refresh_token")
private String refreshToken;
Я переименовал атрибуты как соглашение и вручную добавил свойство json с @JsonProperty.