【问题标题】:How can I use jsonapi in Retrofit2?如何在 Retrofit2 中使用 jsonapi?
【发布时间】:2017-03-29 05:33:26
【问题描述】:

我需要在改造 2 中使用 jsonapi。我尝试使用moshi-jsonapi,但我无法使用 moshi ConverterFactory。

TokenModel.java

@JsonApi(type = "tokens")
public class TokenModel extends Resource {
    @Json(name = "cell_phone")
    public String cellPhone;
}

TestService.java:

public interface TestService {
    @POST("token")
    Call<TokenModel> newOtp(@Body TokenModel tokenModel);
}

TestProvider.java:

public class TestProvider {
    private TestService testService;

    public TestProvider() {
        OkHttpClient httpClient = new OkHttpClient();
        Retrofit refRetrofit = new Retrofit.Builder()
                .baseUrl(ClientConfigs.BASE_URL)
                .client(httpClient)
                .addConverterFactory(MoshiConverterFactory.create())
//                .addConverterFactory(????????????????????????????)
                .build();
        testService = refRetrofit.create(TestService.class);
    }

    publicTestService getTestService() {
        return testService;
    }
}

如果我使用MoshiConverterFactory 会报错Unable to create converter for class com.xxx.xxx.model.TokenModel

使用改造:

TsetProvider testProvider = new TestProvider();
TestService testService = testProvider.getTestService();

TokenModel tokenModel = new TokenModel();
tokenModel.cellPhone = "121212129999";

Call<TokenModel> call = testService.newOtp(tokenModel);
call.enqueue(new Callback<TokenModel>() {
    @Override
    public void onResponse(Call<TokenModel> call, Response<TokenModel> response) {
    }

    @Override
    public void onFailure(Call<TokenModel> call, Throwable t) {
    }
});

【问题讨论】:

    标签: java android retrofit json-api moshi


    【解决方案1】:

    moshi-jsonapi 文档中,您需要将库工厂添加到 moshi 实例:

    // First create the factory
    JsonAdapter.Factory jsonApiAdapterFactory = ResourceAdapterFactory.builder()
      .add(TokenModel.class)
      .build();
    
    // Create a custom moshi instacne
    Moshi moshi = new Moshi.Builder()
      .add(jsonApiAdapterFactory)
      .build();
    
    // Add the custom moshi instance to Retrofits Converter Factory
    Retrofit refRetrofit = new Retrofit.Builder()
      .baseUrl(ClientConfigs.BASE_URL)
      .client(httpClient)
      .addConverterFactory(MoshiConverterFactory.create(moshi))
      .build();
    

    这应该可以解决问题。

    【讨论】:

    • 谢谢。用你的代码解决了。我发现其他solution 与您的答案相同。
    猜你喜欢
    • 2018-04-16
    • 2020-03-19
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多