2017-11-23 10 views
1

私はRedisに格納する必要があるJavaオブジェクト(ComponentType.java)を持っています。私はクライアントライブラリとしてRedissonを使用しています。オブジェクトには、プライベートパラメータ化コンストラクタが1つしかないインスタンス変数(ComponentType)があります。 ComponentTypeクラスは、castorを使用して生成されています。 Redissonでは、シリアル化の一部が正常に動作しますが、私は、オブジェクトを逆シリアル化しようとすると、私は次の例外を取得パラメータ化されたコンストラクタのみを持つクラスの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クライアントでパラメータ化されたコンストラクタのみを持つオブジェクトをサポートするために使用できるその他のシリアル化/逆シリアル化手法。

答えて

0

blog postの概要:

のJava 8を使用すると、必要に応じてコンパイルされたコードでは、コンストラクタのメタデータを含むことができ、ジャクソンは@JsonCreator@JsonPropertyを必要とするのではなく、それを使用することができます。それを達成するために

  • javac
  • -parametersを渡すとコンパイルが含まれ、jackson-module-parameter-names

ジャクソンは、その後castorによって生成された非注釈付きのコンストラクタを使用することができますを登録します。

関連する問題