嗨,我在客户端使用了LogEvent对象来记录事件,我想使用REST API将其发送到服务器。我正在将LogEvent对象转换为json字符串,并通过REST将其作为有效负载发送。在服务器端,我使用Groovy,当我尝试执行objectMapper.readValue()时,我会得到以下错误。
com.fasterxml.jackson.databind.JsonMappingException:找不到非具体集合类型[Collection type;class org.apache.logging.log4j.ThreadContext$ContextStack的反序列化程序,包含[simple type,class 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转换回对象。谢谢你的帮助。
尝试org.apache.logging.log4j.core.parser.JsonLogEventParser
JSONObject jobj = new JSONObject(jsonString);
LogEvent logEvent = new JsonLogEventParser().parseFrom(jsonString);
我在解析一些自定义LogEvent消息时遇到问题,然后我使用带有setObjectMessageAsJsonObject(true)选项的JSONLayout,但如果它是默认的LogEvent,这对我有效。