改造杰克逊在onNext中使用null成员返回POJO

时间:2016-04-12 09:57:43

标签: android jackson retrofit rx-android

我正在使用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");
}

}

0 个答案:

没有答案