it-swarm.com.ru

MalformedJsonException: используйте JsonReader.setLenient (true), чтобы принять искаженный JSON в строке 1 пути столбца 1

Попытка отправить информацию в формате JSON с помощью Retrofit, но она входит в метод Retrofit onFailure и выдает следующую ошибку:

com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

До сих пор я пытался решить эту проблему, используя ответы по следующим ссылкам: 1) MalformedJsonException с Retrofit API? 2) Используйте JsonReader.setLenient (true), чтобы принять искаженный JSON в строке 1, путь 1, столбец $

Вот мой код:

Модифицированный интерфейс:

public interface ServerApi {
    @POST("/register/test")
    Call<User> createAccount(@Body User user);
}

MainActivity с подключением персонала:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        User user= new User("[email protected]","vercode100");
        sendNetworkRequest(user);
    }

    private void sendNetworkRequest(User user){

        //create Retrofit instance
        Retrofit.Builder builder= new Retrofit.Builder()
                .baseUrl("http://localhost:8080")
                .addConverterFactory(GsonConverterFactory.create());

        Retrofit retrofit= builder.build();

        //Get client and call object for the request
        ServerApi client= retrofit.create(ServerApi.class);
        Call<User> call= client.createAccount(user);

        call.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
            }

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

    }
}

Класс пользователя:

public class User {
    private String email;
    private String verificationCode;

    public User(String email, String verificationCode) {
        this.email = email;
        this.verificationCode = verificationCode;
    }

}

Серверная сторона ожидает, что JSON будет таким:

{
    "email" : "user.email",
    "verificationCode" : "123456"
}

Я знаю, что в stackoverflow есть некоторые общие вопросы, но ни один из них полностью не решает мою проблему.

3
abrutsze

Исключение не выдается при отправке ваших данных, но выдается, когда gson пытается проанализировать ответ сервера. Согласно вашему коду, вы ожидаете, что сервер ответит User object, но вы также отправляете объект User.

Ваш сервер отвечает следующим? Потому что это то, что вы говорите дооснащение с помощью Call<User> createAccount(@Body User user)

{ "email": "user.email", "validCode": "123456"}

1
Mars
GsonBuilder gsonBuilder = new GsonBuilder();  
gsonBuilder.setLenient();  
Gson gson = gsonBuilder.create(); 

// and in you adapter set this instance
GsonConverterFactory.create(gson)
1
Florescu Cătălin