如何在没有源的对象上重写 @JsonSerialize() ?

1 java json jackson

我有一个位于 .jar 中的类,我无法修改。

@JsonSerialize()它在类上有一个注释。

@JsonSerialize(using = SomeClassSerializer.class)
@JsonDeserialize(using = SomceClassDeserializer.class)
public class SomeClass { /* ommitted */ }
Run Code Online (Sandbox Code Playgroud)

现在我需要在此类上运行自定义序列化器以输出完全不同的 JSON。

这是我尝试过的:

final SomeClass sc = new SomeClass();
// setup ommitted
final ObjectMapper m = new ObjectMapper();
final SimpleModule module = new SimpleModule();
module.addSerializer(SomeClass.class, new CustomClassSerializer());
m.registerModule(module);
m.enable(SerializationFeature.INDENT_OUTPUT);
m.writer().writeValue(System.out, sc);
Run Code Online (Sandbox Code Playgroud)

问题是我得到默认的带注释的SomeClassSerializer输出,而不是CustomClassSerializer输出。

如何告诉ObjectMapper忽略注释?

小智 5

解决方案

final ObjectMapper m = new ObjectMapper();
m.disable(MapperFeature.USE_ANNOTATIONS);
Run Code Online (Sandbox Code Playgroud)

经过深入研究 JavaDocs,我找到了这个解决方案,这似乎是最惯用的方法。

  • 我认为 MixIn 解决方案要好得多,因为它只更改一个类的配置。“MapperFeature.USE_ANNOTATIONS”功能会关闭所有类的所有注释 - 它可能会在应用程序的其他位置导致问题。 (2认同)