Создание вложенного Json в Java

Я пытаюсь получить Json внутри Json-ответа остального api.

httpsConn.getInputStream () будет похож на Json

"data":[ {"id":"1","name:"aaa","score":"90"},{"id":"2","name":"bbb","score":"85"} ]

Код Jave:

ObjectMapper objectMapper = new ObjectMapper();             
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
response = (MarkResponse)objectMapper.readValue(httpsConn.getInputStream(), MarkResponse.class);

Класс Pojo:

public class MarkResponse {
    private int count;
    private List<MarkData> markData;
    //setter and getter.
}
public class MarkData {
    private String id;
    private String name;
}

Ответ такой, как показано ниже, поскольку я использую список внутри своего основного pojo.

{"headers":{},"body":"MarkResponse [count=2 markData=[MarkData [id=1, name=aaa], MarkData [id=2,name=bbb]]],"statusCode":"ACCEPTED","statusCodeValue":202}

Я ожидаю,

{"headers":{},"body":"MarkResponse [count=2 markData={"id":"1","name:"aaa"},{"id":"2","name":"bbb"}],"statusCode":"ACCEPTED","statusCodeValue":202}

Какое изменение кода я должен сделать, чтобы получить ожидаемый результат.

Какой тип объекта является оболочкой вашего ответа? Я имею в виду класс, который состоит из заголовков, тела, ...

Juraj 23.03.2018 14:56

Извините, но я не понимаю разделов «ответ, как показано ниже» и «то, что я ожидаю». Что это за разметка? Это представление Java toString () вашей переменной ответа во время отладки?

Georg Muehlenberg 23.03.2018 15:04

@Georg Muehlenberg: 1-й - это то, что я получаю после запуска программы, а 2-й - ожидаемый результат.

MSD 23.03.2018 15:05

@Juraj - Я не получаю твой вопрос

MSD 23.03.2018 15:06

@MSD Ладно, а что это за разметка?

Georg Muehlenberg 23.03.2018 15:08

Но каков ответ ниже? Это результат метода toString любого объекта, который оборачивает MarkResponse? Или это вывод, который печатается в вашем браузере при вызове любого API? Как это возможно, что вывод состоит [id = 1, name = aaa], а не этот {id = 1, name = aaa}?

Juraj 23.03.2018 15:12

Ответы ниже не в формате JSON, это точно.

Georg Muehlenberg 23.03.2018 15:12

@Juraj - да. Это to_string (). Вот код: вернуть новый ResponseEntity <String> (response.toString (), HttpStatus.ACCEPTED);

MSD 23.03.2018 15:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
99
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Думаю проблема в полях private. Когда я создаю поля public, Джексон работает, и мне не нужно objectMapper.disable (что-нибудь); когда поля являются частными, или защищенными, или частными для пакета, они читаются, но не записываются.

То есть, предполагая, что вы пытаетесь использовать org.codehaus.jackson.map.ObjectMapper (да, не последнюю версию), а не что-то еще, что определяет класс с именем ObjectMapper.

Ответ принят как подходящий

Это работает после изменения типа возвращаемого значения.

Мой предыдущий ответ был:

public ResponseEntity<String> fnCall() {
     //code here
     return new ResponseEntity<String>(MarkResponse.toString(), HttpStatus.ACCEPTED);
}

Я изменил это, чтобы заставить его работать.

  public MarkResponse fnCall() {
         //code here
         return response;
    }

Другие вопросы по теме