【问题标题】:Why jackson fails to serialize jnativehook NativeKeyEvent?为什么jackson无法序列化jnativehook NativeKeyEvent?
【发布时间】:2013-10-11 05:08:43
【问题描述】:

我正在尝试使用 java json library, jackson 序列化jnativehook 捕获的键事件。

我按照此说明Can't get a basic Jackson Mixin to work 序列化了第 3 方类。

但是它失败并出现以下异常:

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)

这个gist有jar文件的源码和链接。

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

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

【问题讨论】:

    标签: java json serialization jackson


    【解决方案1】:

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

    mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
    

    你可以试试这个吗?

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

    【讨论】:

    • 它确实有效。但正如你所指出的,有一个额外的字段源,我不想成为 json 的一部分。我尝试搜索客户序列化器/反序列化器的一个很好的例子,但不知道如何编写序列化器/反序列化器,它可以支持对象中的多个文件。如果您能指导我如何去做,将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多