如何使用ObjectMapper序列化/反序列化LogEvent对象?

时间:2019-01-09 01:21:52

标签: java json rest log4j objectmapper

嗨,我在客户端使用了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转换回对象。 谢谢你的帮助。

1 个答案:

答案 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,则对我有用。