簡體   English   中英

gson.fromJson 返回 null 個值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM