Как преобразовать класс Object / Model в json и отправить json / Application post запрос на модернизацию 2 - PullRequest
0 голосов
/ 27 июня 2018

у нас есть API, который получает параметры в виде json / application. У меня есть класс Object, и я хочу отправить параметры в виде json и добавить этот API с модификацией 2. Но у меня есть исключение java.lang.IllegalArgumentException: невозможно создать конвертер @Body для класса com.account.sampark.ledger.model.UserRegister (параметр # 1)

public class UserRegister {
private String firstName;
private String lastName;
private String phone1;
private String phone2;
private String emailId;
private String passwd;
private String token;
private int roleId;

public UserRegister(String firstName, String lastName, String phone1, String phone2, String emailId, String passwd, String token) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.phone1 = phone1;
    this.phone2 = phone2;
    this.emailId = emailId;
    this.passwd = passwd;
    this.token = token;
}

public void setRoleId(int roleId) {
    this.roleId = roleId;
}

public int getRoleId() {
    return roleId;
}

}

ApiClient

public class ApiClient {

public static final String BASE_URL = ApiUrls.BASE_URL;

public static Retrofit retrofit = null;

public static Retrofit getApiClient() {
    if (retrofit == null) {
        Timber.plant(new Timber.DebugTree());

        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                Timber.i(message);
            }
        });

        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(loggingInterceptor)
                .connectTimeout(3000, TimeUnit.SECONDS).build();

        retrofit = new Retrofit.Builder().baseUrl(BASE_URL).
                client(client).addConverterFactory(LoganSquareConverterFactory.create()).build();
    }
    return retrofit;
}

}

@Headers("Content-Type: application/json")
@POST(USER + ApiUrls.CREATE)
Call<UserRole> registerUser(@Body UserRegister parm);

И я звоню отсюда

Call<UserRole> call = apiMobile.registerUser(params);

Исключение

 Process: com.account.sampark.ledger, PID: 8334
java.lang.IllegalArgumentException: Unable to create @Body converter for class com.account.sampark.ledger.model.UserRegister (parameter #1)
    for method ApiMobile.registerUser
    at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:755)
    at retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod.java:760)
    at retrofit2.ServiceMethod$Builder.parseParameterAnnotation(ServiceMethod.java:716)
    at retrofit2.ServiceMethod$Builder.parseParameter(ServiceMethod.java:339)
    at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:207)
    at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
    at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
    at java.lang.reflect.Proxy.invoke(Proxy.java:813)
    at $Proxy0.registerUser(Unknown Source)
    at com.account.sampark.ledger.ui.common.fragment.FragmentRegistrationForm$3.onClick(FragmentRegistrationForm.java:118)
    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:163)
    at android.app.ActivityThread.main(ActivityThread.java:6221)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
 Caused by: java.lang.IllegalArgumentException: Could not locate RequestBody converter for class com.account.sampark.ledger.model.UserRegister.
  Tried:
   * retrofit2.BuiltInConverters
   * com.github.aurae.retrofit2.LoganSquareConverterFactory
    at retrofit2.Retrofit.nextRequestBodyConverter(Retrofit.java:303)
    at retrofit2.Retrofit.requestBodyConverter(Retrofit.java:262)
    at retrofit2.ServiceMethod$Builder.parseParameterAnnotation(ServiceMethod.java:713)
        ... 14 more

Я пытался удалить @Headers ("Content-Type: application / json"), но у меня не получилось. См. Мой API json / application здесь

1 Ответ

0 голосов
/ 27 июня 2018

Вы используете LoganSquareConverterFactory, поэтому вам нужно аннотировать каждое поле, как это. проверьте официальный документ Здесь

@JsonObject
public class UserRegister {

@JsonField
private String firstName;
@JsonField
private String lastName;
@JsonField
private String phone1;
@JsonField
private String phone2;
@JsonField
private String emailId;
@JsonField
private String passwd;
@JsonField
private String token;
@JsonField
private int roleId;

public UserRegister() { }

public void setRoleId(int roleId) {
    this.roleId = roleId;
}

public int getRoleId() {
    return roleId;

}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String getPhone1() {
    return phone1;
}

public void setPhone1(String phone1) {
    this.phone1 = phone1;
}

public String getPhone2() {
    return phone2;
}

public void setPhone2(String phone2) {
    this.phone2 = phone2;
}

public String getEmailId() {
    return emailId;
}

public void setEmailId(String emailId) {
    this.emailId = emailId;
}

public String getPasswd() {
    return passwd;
}

public void setPasswd(String passwd) {
    this.passwd = passwd;
}

public String getToken() {
    return token;
}

public void setToken(String token) {
    this.token = token;
}

}

...