应为字符串,但在第 3 行第 4 列路径 $.SUCCESS 处为 BEGIN_OBJECT
Posted
技术标签:
【中文标题】应为字符串,但在第 3 行第 4 列路径 $.SUCCESS 处为 BEGIN_OBJECT【英文标题】:Expected a string but was BEGIN_OBJECT at line 3 column 4 path $.SUCCESS 【发布时间】:2021-01-13 19:08:06 【问题描述】:我用 Retrofit2 做了一个发布请求方法,但我在回复中遇到了这个问题。
Expected a string but was BEGIN_OBJECT at line 3 column 4 path $.SUCCESS
响应应该是
"SUCCESS" :
"200" : "access granted",
"ra" : "approved",
"la" : "approved",
"ch" : "approved"
我将此代码用于发布请求
@POST("login")
Call<Post> createPost(@Body Post post);
对于 POJO 类
public class Post
private String anthony;
private String SUCCESS;
public Post(String name)
this.anthony = name;
public String getSUCCESS()
return SUCCESS;
对于我使用以下代码的方法
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());
);
有人知道我的代码有什么问题吗?我希望在“SUCCESS”json 对象中得到响应。
【问题讨论】:
private String SUCCESS;
与数据不匹配 "SUCCESS" : "200" : "acc ...
有什么线索可以让我得到回复吗? @luk2302
【参考方案1】:
您希望 SUCCESS 成为您想要的响应中的一个对象,但您已在 Post 类中将其定义为字符串。您应该使用一个对象来代替 SUCCESS。
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;
【讨论】:
我从哪里获得@JsonProperty? 来自Jackson Java library。如果可以避免称为“200”的属性,则不需要它,因为它不是有效的 Java 标识符。 在我删除 @JsonProperty 和“200”响应后,我在 getSuccess 响应中收到 Post$PostSuccess@2f5769f。这非常令人困惑。 您应该熟悉 Java 基础知识。打印 post.getSuccess() 将返回 PostSuccess 的 toString() 结果(这是默认设置)。您可以覆盖 PostSuccess 的 toString() 或使打印更具体(例如 post.getSuccess().getRa(),不要忘记 PostSuccess 中的 getter) 好的,非常感谢。试了之后,终于成功了!!!以上是关于应为字符串,但在第 3 行第 4 列路径 $.SUCCESS 处为 BEGIN_OBJECT的主要内容,如果未能解决你的问题,请参考以下文章
应为 BEGIN_ARRAY,但在第 1 行第 1 列路径为 STRING
Retrofit2:预期为 BEGIN_ARRAY,但在第 1 行第 268 列路径 $[0].images 处为 STRING
获得错误预期BEGIN_ARRAY但在第1行第2列路径$是BEGIN_OBJECT
预期 BEGIN_OBJECT 但在第 1 行第 1 列路径为 STRING - Laravel 到改造 2
改造后请求错误 - java.lang.IllegalStateException: 预期 BEGIN_OBJECT 但在第 1 行第 1 列路径 $