无法使用 Gson 编组 JSON 到复杂的 Java 类型

Unable to Marshal JSON to Complex Java Type using Gson

我正在尝试使用 Gson 和 Java 1.8 将 JSON 有效负载编组为复杂的 Java 类型。

我对 Gson 使用的依赖项:

<dependency>
    <groupId>com.squareup.retrofit2</groupId>
    <artifactId>converter-gson</artifactId>
    <version>2.4.0</version>
</dependency>

JSON 响应负载(我用它来模拟我的 POJO)以字符串形式出现:

{
    "header":{
        "timestamp":"1932264786"
    },
    "entity":[
        {
            "id":"1",
            "musician":{
                "genre":{
                    "type":"jazz"
                },
                "timestamp":"2593264786",
                "musician":{
                    "id":"23104"
                }
            }
        }
    ]
}

Header.java:

import lombok.Data;

@Data
public class Header {
    private String timestamp;
}

Entity.java:

import lombok.Data;

@Data
public class Entity {

    private String id;

    @Data
    static class Musician {

        @Data
        static class Genre {
            private String type;
        }

        @Data
        class InnerMusician {
            private String id;
        }
    }
}

GsonObject.java(这是包含上述所有 POJO 的 top-level class):

import lombok.Data;

import java.util.List;

@Data
public class GsonObject {
    private Header       header;
    private List<Entity> entities;
}

在我的调用 class 中,这是未填充的代码:

Gson gson = new Gson();
GsonObject gsonObject = gson.fromJson(json, (Type) GsonObject.class);

gsonObject 内部 header class 已正确填充时间戳,但 List<GsonObject> entities 为空。

我可能做错了什么?

正如@Savior 指出的那样,在 JSON 中,属性是 entity 而在你的 class 中是 entities

在 class 中使用 @SerializedName 将 java 属性映射到 JSON 属性。

@SerializedName("entity")
private List<Entity> entities;