简体   繁体   中英

Expected a string but was BEGIN_OBJECT at line 3 column 4 path $.SUCCESS

I made a post request method with Retrofit2 but I encountered this problem on my response.

Expected a string but was BEGIN_OBJECT at line 3 column 4 path $.SUCCESS

The response should be

{
"SUCCESS" :
{
"200" : "access granted",
"ra" : "approved",
"la" : "approved",
"ch" : "approved"
}
}

I uses this code for the post request

@POST("login")
Call<Post> createPost(@Body Post post);

And for the POJO class

public class Post {

    private String anthony;
    private String SUCCESS;

    public Post(String name) {
        this.anthony = name;
    }

    public String getSUCCESS() {
        return SUCCESS;
    }
}

For the method I use the following code

private void createPost() {
        Post post = new Post("mypassword");
        Call<Post> call = jsonPlaceHolderApi.createPost(post);

        call.enqueue(new Callback<Post>() {
            @Override
            public void onResponse(Call<Post> call, Response<Post> response) {
                if (!response.isSuccessful()) {
                    textViewResult.setText("Code: " + response.code());
                    return;
                }
                Post postResponse = response.body();
                String content = "";
                content += "Code: " + response.code() + "\n";
                content += "S" + postResponse.getSUCCESS();
                textViewResult.setText(content);
            }
            @Override
            public void onFailure(Call<Post> call, Throwable t) {
                textViewResult.setText(t.getMessage());
            }
        });
    }

Does anyone know what's wrong with my code? I expected to get the response inside the "SUCCESS" json object.

You expect SUCCESS to be an object in your wanted response but you have defined it as a String in your Post class. You should use an object for SUCCESS instead.

public class Post {

    private String anthony;
    private PostSuccess SUCCESS;

    public Post(String name) {
        this.anthony = name;
    }

    public PostSuccess getSUCCESS() {
        return SUCCESS;
    }
}

public class PostSuccess {
    @JsonProperty("200")
    private String _200;
    private String ra;
    private String la;
    private String ch;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM