我有一个需要存储在Redis中的java对象(ComponentType.java)。我使用Redisson作为客户端库。该对象有一个实例变量(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;
}
我希望得到以下问题的帮助
有没有办法使用支持注释的castor生成java类。
我可以在Redisson客户端中使用任何其他序列化/反序列化技术来支持仅具有参数化构造函数的对象。
答案 0 :(得分:0)
我的blog post摘要:
使用Java 8,您可以选择在编译代码中包含构造函数元数据,Jackson可以使用它而不是@JsonCreator
和@JsonProperty
。
实现这一目标:
-parameters
传递给javac
jackson-module-parameter-names
castor
生成的非注释构造函数。