bagaimana cara membuat serial/deserialisasi Objek LogEvent menggunakan ObjectMapper?

Hai, saya memiliki Objek LogEvent yang digunakan di sisi klien untuk mencatat peristiwa dan saya ingin mengirimkannya ke server menggunakan REST API. Saya mengonversi Objek LogEvent ke string json dan mengirimkannya sebagai payload melalui REST. Di sisi Server saya menggunakan Groovy dan ketika saya mencoba melakukan objectMapper.readValue() saya mendapatkan kesalahan berikut.

com.fasterxml.jackson.databind.JsonMappingException: Tidak dapat menemukan deserializer untuk tipe Koleksi non-beton [tipe koleksi; kelas org.apache.logging.log4j.ThreadContext$ContextStack, berisi [tipe sederhana, kelas 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. 

Saya tidak dapat mengonversi json kembali ke objek menggunakan ObjectMapper. Terima kasih atas bantuan Anda.


person Raj Vag    schedule 09.01.2019    source sumber


Jawaban (1)


Coba org.apache.logging.log4j.core.parser.JsonLogEventParser

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

Saya memiliki masalah saat mengurai beberapa pesan LogEvent khusus lalu saya menggunakan JSONLayout dengan opsi setObjectMessageAsJsonObject(true), tetapi jika itu adalah LogEvent default, ini berhasil untuk saya.

person AllaG    schedule 17.06.2020