JavaSpringWebClient如何从主体响应中获取atribute并设置为给定的类



我正在尝试使用一个给定的API,该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的响应并获取其atributes时,该类被实例化,但它的所有atributes都为null。以下是我正在尝试的:

@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将其设置为给定的类?

谨致问候。

对于任何有这个问题的人,我的问题是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;

我将属性重命名为约定,并使用@JsonProperty手动添加json属性。

最新更新