[英]gson.fromJson return null values
這是我的 JSON 字符串: "{'userName': 'Bachooo'}"
JSON String轉LoginVO的邏輯是:
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
LoginVO loginFrom = gson.fromJson(jsonInString, LoginVO.class);
System.out.println("userName " + loginFrom.getUserName()); // output null
我的登錄VO.class是:
public class LoginVO {
private String userName;
private String password;
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
}
注意我使用的是jdk 1.8.0_92
loginForm.getUserName() 的 Output 是NULL
而不是"Bachooo"
對這個問題有什么想法嗎?
由於您在GsonBuilder
上設置excludeFieldsWithoutExposeAnnotation()
配置,因此您必須在要序列化/反序列化的字段上放置@Expose
注釋。
因此,為了使excludeFieldsWithoutExposeAnnotation()
序列化/反序列化您的字段,您必須添加該注釋:
@Expose
private String userName;
@Expose
private String password;
或者,您可以從GsonBuilder
刪除excludeFieldsWithoutExposeAnnotation()
。
添加什么為我解決了這個問題。 因此,在我的 API 中,使用了以下 gson 實現:
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
我不得不在我的測試中使用相同的實現,在此之前 gson 未能解析屬性。
所以本質上檢查你的 gson 是如何在 api/handler 中配置的,並在你的測試中使用相同的配置。
請像這樣嘗試。 這是示例類:
class AngilinaJoile {
private String name;
// setter
// getter
}
下面是你如何用 Gson 反序列化它:
Gson gson = new Gson();
String jsonInString = "{'name' : 'kumaresan perumal'}";
AngilinaJoile angel = gson.fromJson(jsonInString, AngilinaJoile.class);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.