Получить значения полей из объекта типа Object (Spring) - PullRequest
0 голосов
/ 17 июня 2020

При загрузке Java Spring у меня есть какой-то объект (типа Object), возвращенный функцией, имеющей следующую структуру:

{id=5, name=Jasmin, description=Room Jasmin, idType=0, addedAt=2020-06-16T17:20:00.617+0000, modifiedAt=null, deleted=true, images=[string],
idBuilding=2, idFloor=4, idZone=3}

Как получить значение идентификатора? Я попытался преобразовать его в JSONObject, но он не работает, также я попробовал подход отражения:

    Class<?> clazz = x.getClass();
    Field field = clazz.getField("fieldName"); 
    Object fieldValue = field.get(x);

Но он не работает либо возвращает null.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Сначала создайте простой POJO с единственным свойством id Person. java

   ObjectMapper mapper = new ObjectMapper();

   // convertValue - convert Object of JSON to respective POJO class
   GithubUsers githubUsers = mapper.convertValue(singleJsonData, Person.class);

Если вы получите его с помощью RestTemplate:

    List<GithubUsers> returnValue = new ArrayList<>();     
    List<Object> listOfJsonData = restTemplate.getForObject("your-url", Object.class);

 for (Object singleJsonData : listOfJsonData) {

      ObjectMapper mapper = new ObjectMapper();

      // convertValue - convert Object of JSON to respective POJO class
      Person persons = mapper.convertValue(singleJsonData, Person.class);

        returnValue.add(persons);
    }
    return returnValue;

Отсюда вы может получить только id из объекта JSON.

0 голосов
/ 17 июня 2020

Если вы не можете изменить функцию восходящего потока, чтобы вернуть что-то более полезное, потому что это из внешней библиотеки или чего-то еще, то создание JsonNode (или аналогичного) может быть полезным:

try {
    ObjectMapper mapper = new ObjectMapper();
    String json = mapper.writeValueAsString(x);
    JsonNode jsonNode = mapper.readTree(json);
    JsonNode idNode = jsonNode.get("id");
    int id = idNode.asInt();
    System.out.println("id = " + id);
}
catch (JsonProcessingException e) {
    e.printStackTrace();
}

Если type на самом деле просто «Object», он не реализует Serializable и должен быть заключен в класс, который это делает. Вот отличное объяснение: Как сериализовать несериализуемое в Java?

Для справки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...