Java 序列化Jackson中没有数据的对象
是否可以仅使用注释序列化Jackson中没有字段的对象?当我尝试序列化这样一个没有注释的对象时,我得到:Java 序列化Jackson中没有数据的对象,java,serialization,jackson,Java,Serialization,Jackson,是否可以仅使用注释序列化Jackson中没有字段的对象?当我尝试序列化这样一个没有注释的对象时,我得到: Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class [redacted].SubjectObjectFeatureExtractor and no properties discovered to create BeanSer
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class [redacted].SubjectObjectFeatureExtractor and no properties discovered to create BeanSerializer
我已经检查了类,但没有看到将类注释为没有可序列化数据的方法。我尝试将@JsonCreator
放在空构造函数上(不希望它工作,因为它是一个反序列化注释),但我得到了相同的错误。没有可放置@JsonProperty
的访问器或字段。有什么想法吗
更新:原因是我有一个对象列表,这些对象表示可以应用于特定类型数据的转换。其中一些转换是由需要序列化的参数定义的,但其中一些是无参数的(有问题的无数据对象)。我希望能够序列化和反序列化这些转换的序列。此外,我还使用了DefaultTyping.NON_FINAL
,以便将类名序列化
更新:一个示例类是
class ExtractSomeFeature implements FeatureExtractor<SomeOtherType> {
public void extractFeature(SomeOtherType obj, WeightedFeatureList output) {
// do stuff
}
}
FeatureExtractor
的其他子类将具有实际参数,因此它们可能看起来像:
['com.mycompany.foo.ExtractSomeFeature', {}]
[`com.mycompany.foo.SomeParameterizedFeature', {some actual JSON stuff in here}]
我想我可以在一些
toJSONString()
方法上使用@JsonValue
来返回{}
,但是如果可能的话,我想对最终用户隐藏这样的黑客行为,他们将创建FeatureExtractor
子类。我不确定是否理解你的问题,但也许你想,或者。在类中添加以下注释似乎可以解决问题:
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
添加不相关的注释like
@JsonRootName("fred")
似乎也能解决这个问题。这似乎与JIRA票证中的声明相符,即向类添加任何Jackson注释都将防止异常。但是,在类中添加注释似乎不起作用。您必须配置对象映射器以支持这种情况
ObjectMapper objectMapper = ...
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
此功能的文档可在此处找到:
确定在找不到访问器时发生的情况的功能
类型(并且没有任何注释指示它的用途)
序列化)。如果启用(默认),将引发异常以指示
这些类型是不可序列化的类型;如果禁用,它们将序列化为
空对象,即没有任何属性
答案是全局的,因此您可能不希望应用它
对的回答显示了正确的修复方法(如:Javadoc ofSerializationFeature.FAIL\u ON\u EMPTY\u BEANS
建议的那样),但只使用了一个黑客或不相关的注释
只是加上
@JsonSerialize
…对于我的类(甚至连括号都没有,唯恐后面只有参数!)我能够产生同样的效果(正如
SerializationFeature.FAIL_ON_EMPTY_BEANS
)的Javadoc所示)?这有什么用途?@SotiriosDelimanolis:我已经更新了这个问题以回答您的问题。请举例说明您想要序列化的对象类型以及您希望生成的JSON是什么。@SotiriosDelimanolis:question updated。Jackon的JIRA中有一个相关问题:,这似乎表明问题已经解决,因此带有其他Jackson注释的POJO(例如,我认为空构造函数上的@JsonCreator)不应该抛出异常。然而,事实似乎并非如此。这个答案并不依赖于黑客,因此更“正确”。谢谢