0

Java json ライブラリ jacksonを使用してjnativehookによってキャプチャされた keyevent をシリアル化しようとしています。

私はこの指示に従いました サードパーティのクラスをシリアル化するために、基本的な Jackson Mixin を取得できません。

ただし、次の例外で失敗します。

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 ファイルのソースとリンクは、このgistにあります。

ジャクソンがデバッガーでシリアライズしている要素を確認しようとしました。jnativehook ライブラリには見られない "source" 属性が表示されます。これは、jackson がシリアライズに失敗する要素です。この要素は実行時に追加されると思いますが、その理由とタイミングはわかりません。

このフィールドをシリアライズしないように、またはいくつかの選択属性のみをシリアライズするように指示できるように、ジャクソンに方法はありますか?

4

1 に答える 1