我正在使用Retrofit,Jackson和Rx进行一些网络服务电话。这一个端点给了我麻烦。根据Retrofit日志,它正确地发出了POST请求,但是当我订阅onNext
时,POJO被填充为null。
我已经以相同的方式写了几个端点,并且没有任何问题。与此唯一的唯一真正区别是它是一个裸JSON有效载荷,而其他有效载荷映射到值列表。
以下是日志中显示的JSON:
{
"token_type": "Bearer",
"access_token": "37437e46-d1a1-44fa-9a6a-ab92d7dd673f",
"expires_in": 83191,
"refresh_token": "4add01a5-bdc9-489e-87f3-ab8e19f2b6e5"
}
这是我的POJO:
public class AccessToken {
@JsonProperty(value = "token_type", required = true)
public String tokenType;
@JsonProperty(value = "access_token", required = true)
public String accessToken;
@JsonProperty(value = "expires_in", required = true)
public int expiry;
@JsonProperty(value = "refresh_token", required = true)
public String refreshToken;
...
}
改造请求:
public class AuthenticationService {
private final LoginUserService mLoginUserService;
public interface LoginUserService {
@FormUrlEncoded
@POST("/oauth/access_token")
Observable<AccessToken> loginUser(
@Field("client_id") String clientId,
@Field("client_secret") String clientSecret,
@Field("username") String email,
@Field("password") String password,
@Field("grant_type") String grantType);
}
public AuthenticationService() {
RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Accept", "application/json");
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(Config.API_URL)
.setRequestInterceptor(requestInterceptor)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
mLoginUserService = restAdapter.create(LoginUserService.class);
}
public Observable<AccessToken> loginUser(String email, String password) {
return mLoginUserService.loginUser(Config.CLIENT_ID, Config.CLIENT_SECRET, email, password, "password");
}
}