Я знаю, что есть другие подобные сообщения, но я не нашел ни одного, который помог бы мне найти решение для этого конкретного случая.
Я пытаюсь вернуть HashMap<String, Object>
с моего контроллера.Часть Object
является строкой JSON, но она дважды сериализуется и не возвращается в виде необработанной строки JSON, поэтому не заканчивается дополнительными кавычками и escape-символами.
Функция контроллера:
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public HashMap<String, Object> heartbeat(){
String streamInfo = service.getStreamInfo();
String streamCursorInfo = service.getStreamCursorInfo();
String topicInfo = service.getTopicInfo();
String greeting = "This is a sample app for using Spring Boot with MapR Streams.";
HashMap<String, Object> results = new HashMap();
results.put("greeting", greeting);
results.put("streamInfo", streamInfo);
results.put("streamCursorInfo", streamCursorInfo);
results.put("topicInfo", topicInfo);
return results;
}
Сервисная функция:
private String performCURL(String[] command){
StringBuilder stringBuilder = new StringBuilder();
try{
ProcessBuilder processBuilder = new ProcessBuilder(command);
Process p = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while((line = reader.readLine()) != null){
stringBuilder.append(line);
}
}
catch(Exception e){
LOGGER.error(ExceptionUtils.getRootCauseMessage(e));
}
return stringBuilder.toString();
}
Я запускаю команду cURL, которая возвращает необработанную строку JSON.Так что я просто пытаюсь добавить его в HashMap, чтобы он возвращался в ответе сердцебиения.
Но каждый раз, когда я запускаю это, мой вывод выглядит так:
{
"greeting": "This is a sample app for using Spring Boot with MapR Streams.",
"streamCursorInfo": "{\"timestamp\":1538676344564,\"timeofday\":\"2018-10-04 02:05:44.564 GMT-0400 PM\",\"status\":\"OK\",\"total\":1,\"data\":[{\"consumergroup\":\"MapRDBConsumerGroup\",\"topic\":\"weightTags\",\"partitionid\":\"0\",\"produceroffset\":\"44707\",\"committedoffset\":\"10001\",\"producertimestamp\":\"2018-10-03T05:57:27.128-0400 PM\",\"consumertimestamp\":\"2018-09-21T12:35:51.654-0400 PM\",\"consumerlagmillis\":\"1056095474\"}]}",
...
}
Если я возвращаю только одну строку, такую как streamInfo
, тогда она работает нормально и не добавляет лишних кавычеки избежать символов.
Может кто-нибудь объяснить, что мне не хватает или что нужно сделать, чтобы предотвратить эту двойную сериализацию?