Я пытаюсь получить 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}
Какое изменение кода я должен сделать, чтобы получить ожидаемый результат.
Извините, но я не понимаю разделов «ответ, как показано ниже» и «то, что я ожидаю». Что это за разметка? Это представление Java toString () вашей переменной ответа во время отладки?
@Georg Muehlenberg: 1-й - это то, что я получаю после запуска программы, а 2-й - ожидаемый результат.
@Juraj - Я не получаю твой вопрос
@MSD Ладно, а что это за разметка?
Но каков ответ ниже? Это результат метода toString любого объекта, который оборачивает MarkResponse? Или это вывод, который печатается в вашем браузере при вызове любого API? Как это возможно, что вывод состоит [id = 1, name = aaa], а не этот {id = 1, name = aaa}?
Ответы ниже не в формате JSON, это точно.
@Juraj - да. Это to_string (). Вот код: вернуть новый ResponseEntity <String> (response.toString (), HttpStatus.ACCEPTED);




Думаю проблема в полях 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;
}
Какой тип объекта является оболочкой вашего ответа? Я имею в виду класс, который состоит из заголовков, тела, ...