java - 导入类时,带有 Gson 的嵌套对象返回 null

标签 java json gson

我对 Java 很生疏,所以我想知道是否有人可以提供帮助。我有一个来自 REST API 的 Json,我似乎无法读取嵌套对象,但字段就在那里,所以我不知所措。

这是我的 json 字符串的样子(来自 String result = response.getEntity(String.class); 在wrapper.java 中的结果)

result = "{"FIRST_NAME":"Test First","LAST_NAME":"Test Last","testAttr":[{"MOTHER_NAME":"Test Mother 1","FATHER_NAME":"Test Father 1"}, {"MOTHER_NAME":"Test Mother 2","FATHER_NAME":"Test Father 2"}]}"

(to better read it)
result = {
   "FIRST_NAME": "Test First",
   "LAST_NAME": "Test Last",
   "testAttr": {
                 "MOTHER_NAME":"Test Mother 1",
                 "FATHER_NAME":"Test Father 1"
               },
               {
                 "MOTHER_NAME":"Test Mother 2",
                 "FATHER_NAME":"Test Father 2"
               }
         }

使用下面的代码,我能够毫无问题地获取名字和姓氏,但我无法获取嵌套对象,除非我明确地将它们放入相同的对象中(使用 @Serialized、@Exposure )。我不确定我到底哪里出了问题,因为我导入时没有错误:/

Main.java

@GET
@Path("/api/test")
@Produces(MediaType.APPLICATION_JSON)
public Response getAttributrs(@Context HttpServletRequest req) {
        ResponseObj responseObj = new ResponseObj();
        try {
            ResponseObj listOfAttr = wrapper.getAttr();
            return Response.ok(listOfAttr).build();
        } catch (Exception e) {
            wrapper.manageError(e, responseObj) ;
            return Response.status(500).entity(responseObj).build();
        } 
    }
Wrapper.java

public ResponseObj getAttr() throws Exception {

        Client client = ClientHelper.createClient();
        WebResource webResource = client
                .resource("https://xxxxxxxxx);
        webResource.header("X-METHOD-OVERRIDE", "GET");
        webResource.header("content-type", "application/json");
        ClientResponse response = webResource.type("application/json").get(ClientResponse.class);
        if (response.getStatus() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
        }
        String result = response.getEntity(String.class);
        ResponseObj responseObj = new Gson().fromJson(result, ResponseObj.class);
        return responseObj;
    }
ResponseObj.java

@SerializedName("testAttr")
@Expose
private List<AttributesClass> testAttributes;

// getters/setters
AttributeClass.java

private TestInnerClass testInnerClass;
@SerializedName("FIRST_NAME")
@Expose
private String firstName;
@SerializedName("LAST_NAME")
@Expose
private String lastName;

//getters/setters
TestInnerClass.java
@SerializedName("MOTHER_NAME")
@Expose
private String mothersName;
@SerializedName("FATHER_NAME")
@Expose
private String fathersName;

//getters/setters

最佳答案

您的模型类应如下所示

1 级

public class ResponseObj {
@SerializedName("FIRST_NAME")
private String fIRSTNAME;
@SerializedName("LAST_NAME")
private String lASTNAME;
@SerializedName("testAttr")
private List<AttributeClass> testAttr = null;
// getter and setter

2级

public class AttributeClass {
@SerializedName("MOTHER_NAME")
private String mOTHERNAME;
@SerializedName("FATHER_NAME")
private String fATHERNAME;
// getter and setter

两个类就足够了。

关于java - 导入类时,带有 Gson 的嵌套对象返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60375967/

相关文章:

java - Postgres 9.4 - 连接被拒绝 - 当我从远程 PC 连接时

java - 使用 JavaEE 7 中的 JSON 处理创建业务对象

javascript - ExtJS 从 URL 获取更新进度条

java - PHP Json解析Java对象

java - com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:应为 BEGIN_ARRAY 但为 STRING

java - 如何验证Java中的内存泄漏

java - 我们可以在JSP中实现接口(interface)或扩展类吗?

具有泛型类型的 Java 8 方法引用

javascript - jQuery在输入标签中推送多个值

java - 使用 minimal-json 和 Gson 进行 JSON 解析