как сериализовать/десериализовать объект LogEvent с помощью ObjectMapper?

Привет, у меня есть объект LogEvent, используемый на стороне клиента для регистрации событий, и я хочу отправить его на сервер с помощью REST API. Я конвертирую объект LogEvent в строку json и отправляю его в качестве полезной нагрузки через REST. На стороне сервера я использую Groovy, и когда я пытаюсь выполнить objectMapper.readValue(), я получаю следующую ошибку.

com.fasterxml.jackson.databind.JsonMappingException: не удается найти десериализатор для неконкретного типа коллекции [тип коллекции; класс 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. 

Я не могу преобразовать json обратно в объект с помощью ObjectMapper. Спасибо за вашу помощь.


person Raj Vag    schedule 09.01.2019    source источник


Ответы (1)


Попробуйте org.apache.logging.log4j.core.parser.JsonLogEventParser

JSONObject jobj = new JSONObject(jsonString);
LogEvent logEvent = new JsonLogEventParser().parseFrom(jsonString);

У меня проблема с анализом некоторого пользовательского сообщения LogEvent, тогда я использую JSONLayout с параметром setObjectMessageAsJsonObject(true), но если это LogEvent по умолчанию, это сработало для меня.

person AllaG    schedule 17.06.2020