Java 序列化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

是否可以仅使用注释序列化Jackson中没有字段的对象?当我尝试序列化这样一个没有注释的对象时,我得到:

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 of
SerializationFeature.FAIL\u ON\u EMPTY\u BEANS
建议的那样),但只使用了一个黑客或不相关的注释

只是加上

@JsonSerialize

…对于我的类(甚至连括号都没有,唯恐后面只有参数!)我能够产生同样的效果(正如
SerializationFeature.FAIL_ON_EMPTY_BEANS
)的Javadoc所示)?这有什么用途?@SotiriosDelimanolis:我已经更新了这个问题以回答您的问题。请举例说明您想要序列化的对象类型以及您希望生成的JSON是什么。@SotiriosDelimanolis:question updated。Jackon的JIRA中有一个相关问题:,这似乎表明问题已经解决,因此带有其他Jackson注释的POJO(例如,我认为空构造函数上的@JsonCreator)不应该抛出异常。然而,事实似乎并非如此。这个答案并不依赖于黑客,因此更“正确”。谢谢