1

Redis に保存する必要がある Java オブジェクト (ComponentType.java) があります。クライアント ライブラリとして Redisson を使用しています。オブジェクトには、パラメーター化されたプライベート コンストラクターが 1 つしかないインスタンス変数 (ComponentType) があります。ComponentType クラスは、castor を使用して生成されています。Redisson では、シリアル化部分は正常に動作しますが、オブジェクトを逆シリアル化しようとすると、次の例外が発生します

Exception in thread "main" org.redisson.client.RedisException: Unexpected exception while processing command
    at org.redisson.command.CommandAsyncService.convertException(CommandAsyncService.java:324)
    at org.redisson.command.CommandAsyncService.get(CommandAsyncService.java:167)
    at org.redisson.RedissonObject.get(RedissonObject.java:75)
    at org.redisson.RedissonMap.put(RedissonMap.java:256)
    at tester.RedissonIPWCTaskTester.populateMap(RedissonIPWCTaskTester.java:67)
    at tester.RedissonIPWCTaskTester.main(RedissonIPWCTaskTester.java:51)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.mae.component.valueobject.types.ComponentType]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
 at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 769] (through reference chain: com.mae.component.valueobject.ComponentVO["_type"])
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:256)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1134)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:298)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:168)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:135)
    at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:120)
    at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:91)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeWithType(BeanDeserializerBase.java:1021)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:493)

ComponentType のコンストラクターが次のように手動で変更されると、例外は解決されます。

@JsonCreator
private ComponentType(@JsonProperty("type") int type, @JsonProperty("value") java.lang.String value) {
    super();
    this.type = type;
    this.stringValue = value;
} 

次の質問について助けていただければ幸いです

  1. 注釈をサポートするキャスターを使用して Java クラスを生成する方法はありますか。

  2. パラメータ化されたコンストラクターのみを持つオブジェクトをサポートするために Redisson クライアントで使用できるその他のシリアル化/逆シリアル化手法。

4

1 に答える 1