Java 为什么jackson未能序列化jnativehook NativeKeyEvent?

Java 为什么jackson未能序列化jnativehook NativeKeyEvent?,java,json,serialization,jackson,Java,Json,Serialization,Jackson,我正在尝试序列化通过使用捕获的keyevent 我按照此说明序列化第三方类 但是,它失败了,但有以下例外: The class of event object is : org.jnativehook.keyboard.NativeKeyEvent com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.jnativehook.GlobalScreen and no proper

我正在尝试序列化通过使用捕获的keyevent

我按照此说明序列化第三方类

但是,它失败了,但有以下例外:

The class of event object is : org.jnativehook.keyboard.NativeKeyEvent
com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.jnativehook.GlobalScreen and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: org.jnativehook.keyboard.NativeKeyEvent["source"])
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:59)
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:26)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:569)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:597)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:142)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:118)
    at com.fasterxml.jackson.databind.ObjectWriter._configAndWriteValue(ObjectWriter.java:681)
    at com.fasterxml.jackson.databind.ObjectWriter.writeValueAsString(ObjectWriter.java:567)
    at GlobalKeyListenerExample.nativeKeyReleased(GlobalKeyListenerExample.java:45)
    at org.jnativehook.GlobalScreen.processKeyEvent(Unknown Source)
    at org.jnativehook.GlobalScreen$1.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
jar文件的源代码和链接在本文档中提供

我试图查看jackson在调试器中序列化的元素是什么。我看到了jnativehook库中没有的“source”属性。这是jackson无法序列化的元素。我认为这个元素是在运行时添加的,但不确定为什么以及何时添加


jackson中是否有任何方法可以让我指示它不要序列化此字段或只序列化少数选择属性?

在异常描述中,您有解决此错误的提示:

mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
你能试试这个吗


如果只想序列化某些属性,还可以为此字段实现自定义序列化程序。

它确实有效。但正如您所指出的,还有一个额外的字段源,我不想成为json的一部分。我试图搜索一个很好的客户序列化器/反序列化器示例,但不知道如何编写序列化器/反序列化器,它可以支持对象中的多个字段。如果你能告诉我怎么做,我将不胜感激。