当前位置: 首页 > 知识库问答 >
问题:

对象列表的Java lombok通用字段[重复]

卢元龙
2023-03-14

我有来自api的json响应,结构如下:

{
    "countPerPage": 20,
    "totalCount": 401,
    "currentPage": 1,
    "totalPage": 21,
    "data": [
        {
            "id": 1,
            "catId": 12,
            "dogId": 12,
            "creationDate": "2022-01-03 12:29:38",
            "comment": "Some comment"
        },
        {
            "id": 2,
            "catId": 13,
            "dogId": 16,
            "creationDate": "2022-01-08 11:14:25",
            "comment": "Some comment"
        },
        ...
    ]
}

像这样

{
    "countPerPage": 20,
    "totalCount": 226,
    "currentPage": 3,
    "totalPage": 12,
    "data": [
        {
            "id": 1,
            "parentId": 12,
            "firstName": "John",
            "lastName": "Doe",
            "creationDate": "2022-01-03 12:29:38",
            "age": 25
        },
        {
            "id": 1,
            "parentId": 12,
            "firstName": "Michael",
            "lastName": "Finder",
            "creationDate": "2022-01-08 11:14:25",
            "age": 24
        },
        ...
    ]
}

和其他具有相同结构的产品。

如果我为这样的人创建响应java类

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class PersonResponse{
    @JsonProperty("id")
    private int id;

    @JsonProperty("parentId")
    private int parentId;

    @JsonProperty("firstName")
    private String firstName;

    @JsonProperty("lastName")
    private String lastName;

    @JsonProperty("creationDate")
    private String creationDate;

    @JsonProperty("age")
    private int age;
}

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class PersonWithCount {
    @JsonProperty("countPerPage")
    private int countPerPage;

    @JsonProperty("totalCount")
    private int totalCount;

    @JsonProperty("currentPage")
    private int currentPage;

    @JsonProperty("totalPage")
    private int totalPage;

    @JsonProperty("data")
    private List<PersonResponse> data;
}

对于这样的动物

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AnimalResponse{
    @JsonProperty("id")
    private int id;

    @JsonProperty("catId")
    private int catId;

    @JsonProperty("dogId")
    private int dogId;

    @JsonProperty("creationDate")
    private String creationDate;

    @JsonProperty("comment")
    private String comment;
}

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AnimalWithCount {
    @JsonProperty("countPerPage")
    private int countPerPage;

    @JsonProperty("totalCount")
    private int totalCount;

    @JsonProperty("currentPage")
    private int currentPage;

   @JsonProperty("totalPage")
    private int totalPage;

    @JsonProperty("data")
    private List<AnimalResponse> data;
}

所有作品都很好。但是我如何使用像泛型这样的通用的东西,因为不要复制和粘贴每个具有相同数据的时间类,其中只更改了最后一个字段?

我期待这样的事情,但它并没有工作

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class DataWithCount<T> {
    @JsonProperty("countPerPage")
    private int countPerPage;

    @JsonProperty("totalCount")
    private int totalCount;

    @JsonProperty("currentPage")
    private int currentPage;

    @JsonProperty("totalPage")
    private int totalPage;

    @JsonProperty("data")
    private List<T> data;
}

填充变量

personListWithCount = ObjectMapperCreator.objectMapperCreator().readValue(personResponse.getBody().asPrettyString(), PersonListWithCount.class);

也许我做错了什么?

共有1个答案

索锐藻
2023-03-14

帮助回答其他问题(杰克逊 - 使用泛型类反序列化):

mapper.readValue(jsonString, new TypeReference<DataWithCount<AnimalResponse>>() {});

第二种方式也有效

JavaType type = mapper.getTypeFactory().constructParametricType(DataWithCount.class, AnimalResponse.class);
DataWithCount<AnimalResponse> data = mapper.readValue(json, type);

谢谢@Nick

 类似资料:
  • 我有以下Java POJO 如何实现在游戏对象列表中确定重复字段的功能? 例如,当两个游戏有相同的开始日期? 我以前使用过,但仅在根据最早日期等对对象进行排序时使用过,但它能否用于对重复项进行排序?

  • 我正在尝试对List的字段求和并返回值。我想为此使用流,但我对流不熟悉,不确定流是否可以完成此操作。这是我尝试过的,但我认为语法不正确。 上下文的相关类结构。 获取总价和单价方法

  • 假设我们有: 我们有一个实例列表,即

  • 我的软件上有一个对象列表,我想通过一个公共字段进行排序,例如: 我可以对列表进行排序以使ID=1的对象只出现一次吗?在这种情况下,列表中只剩下ID=1的第一个对象,例如: 我怎样才能做到这一点?

  • 我有一个包含员工姓名的字符串列表。

  • 我的RESTendpoint返回包含对象字段的响应对象。序列化一切正常,但当我开始为此API编写客户端时,我遇到了反序列化问题。我根据一些关于使用Jackson进行多态序列化的问题/文章制作了这个示例代码。它演示了这个问题。 我的期望(以及我对列表的期望 我现在拥有的Object: 但我需要反序列化除动物列表之外的其他类型的对象。救命啊!