嗨,我在客户端使用了LogEvent对象来记录事件,我想使用REST API将其发送到服务器。我将LogEvent对象转换为json字符串,并通过REST作为有效负载发送。 在服务器端,我正在使用Groovy,当我尝试执行objectMapper.readValue()时,出现以下错误。
com.fasterxml.jackson.databind.JsonMappingException:找不到非具体Collection类型[collection type; org.apache.logging.log4j.ThreadContext $ ContextStack类,包含[简单类型,类java.lang.String]]
/// Client Side code.
private final List<LogEvent> eventQueue = new LinkedList<>();
List<LogEvent> logToSend;
eventsToSend = new ArrayList<>(eventQueue);
String jsonLogStream = new String();
ObjectMapper mapperObj = new ObjectMapper();
try{
jsonLogStream = mapperObj.writeValueAsString(logToSend);
}catch (IOException e){
e.printStackTrace();
}
closeableHttpResponse = communicationManager.executeHttpPost(uri, Collections.emptyMap(), new ByteArrayInputStream(jsonLogStream.getBytes()), false);
//// In Groovy
//
String logstream = request.getJSON().toString()
//here I'm getting LogEvents converted to json
LogEvent[] events = mapper.readValue(logstream, LogEvent[].class )
// mapper.readvalue giving error mentioned.
我无法使用ObjectMapper将json转换回对象。 谢谢你的帮助。
答案 0 :(得分:0)
尝试org.apache.logging.log4j.core.parser.JsonLogEventParser
JSONObject jobj = new JSONObject(jsonString);
LogEvent logEvent = new JsonLogEventParser().parseFrom(jsonString);
我在解析一些自定义LogEvent消息时遇到问题,然后将JSONLayout与setObjectMessageAsJsonObject(true)选项结合使用, 但是如果它是默认的LogEvent,则对我有用。