无法使用 Jackson 解析 JSON

Unable Parse a JSON using Jackson

我的代码中有一个 mongo 数据库调用。来自数据库的响应使用 codehaus jackson 进行映射。

Json:

[
  {
    "_id": "555",
    "rates": 1,
    "reviews": [
      {
        "author_name": "Instructor 9999",
        "_authKey": "demo\556",
        "text": "asdfa",
        "date": 551,
        "_id": "5454-4920",
        "title": "asdf",
        "comments": []
      }
    ],
    "votedUsers": [
      {
        "mng\39999": 4
      }
    ],
    "rating": 4
  },
  {
    "_id": "45589",
    "rates": 1,
    "reviews": [
      {
        "author_name": "feef",
        "_authKey": "ad\ads",
        "text": "Working perfect",
        "date": 1498659163,
        "_id": "asdas-319",
        "title": "test",
        "comments": []
      }
    ],
    "votedUsers": [
      {
        "abc\bis@cdf.com": 4
      }
    ],
    "rating": 4
  }
]

我创建了以下 DTO 结构:

@JsonIgnoreProperties(ignoreUnknown = true)
public class MaterialReviewsDTO implements Serializable {

    private static final long serialVersionUID = 1L;
    private String _id;
    private int rates;
    private List<ReviewsDTO> reviews;
    private List<VotedUsersDTO> votedUsers;
    //List<TypeReference<HashMap<String, String>>> votedUsers;
    private int rating;.
    //Getter Setter
}

@JsonIgnoreProperties(ignoreUnknown = true)
public class VotedUsersDTO implements Serializable {

    private static final long serialVersionUID = 1L;
    private Map<String, String> votedUser;
    //Getter Setter
}

下面是我触发查询的代码:

List<MaterialReviewsDTO> materialReviewsDTOs = DBConnectionRealmByDBName
                    .find(query,
                            MaterialReviewsDTO.class,
                            CollectionNameConstant.REVIEWS_COLLECTION);

问题是所有 JSON 都被映射到 DTO 中,除了以下部分:

"votedUsers" : [ 
            {
                "abc\bis@cdf.com" : 4
            }
        ]

VotedUserDTO 在响应中为空。 VotedUsers 是包含键值对数据的对象列表。

我没有提到 ReviewsDTO,因为它已被完美映射。如何映射 votedUsers 部分? 注意:我正在使用Spring进行开发。

votedUsers 应该是一个 VotedUsersDTO 列表。
如果您查看 JSON:

中的 VotedUsersDTO
{
"abc\bis@cdf.com" : 4
}

这意味着有一个字段 abc\bis@cdf.com 您希望其值为 4。 这不符合 DTO 定义中的 idvotedUser 映射。

您JSON
的一些观察 1. Json设计时应考虑固定键和变量值。
2. 由于在上面的例子中,Key 和 values 都是可变的,我们可以使用 Map
所以最终的解决方案是
private List<VotedUsersDTO> votedUsers; 更改为 private List<Map<String, Integer>> votedUsers

private List<Map<String, String>> votedUsers;

不要使用明确的 votedUser DTO。