Невозможно разобрать JSON с помощью Джексона - PullRequest
0 голосов
/ 30 января 2019

У меня есть вызов базы данных Монго в моем коде.Ответ из базы данных отображается с использованием 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 имеет значение null в ответ.VotedUsers - это список объектов, содержащих данные в паре ключ-значение.

Я не упоминаю ReviewsDTO, так как это отлично отображается.Как я могу отобразить votedUsers часть? Примечание: Я использую Spring для разработки.

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Некоторые наблюдения из вашего JSON
1. Json должен быть спроектирован с учетом фиксированных значений ключей и переменных.
2. Поскольку в приведенном выше случае и ключ, и значения являются переменными, мы можем использовать Map
Таким образом, окончательное решение
изменить с private List<VotedUsersDTO> votedUsers; на private List<Map<String, Integer>> votedUsers

0 голосов
/ 30 января 2019

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

Не используйте явный votedUser DTO.

0 голосов
/ 30 января 2019

Ожидается, что votedUsers будет списком VotedUsersDTO.
Если вы посмотрите на свой VotedUsersDTO в JSON:

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

Это означает, что есть поле abc\\bis@cdf.com, в котором вы хотитезначение равно 4. Это не соответствует id или votedUser Map в определении DTO.

...