gpt4 book ai didi

java - Jackson 强制序列化最终字段而无需注释

转载 作者:太空宇宙 更新时间:2023-11-04 09:04:25 24 4
gpt4 key购买 nike

我有一个带有私有(private)构造函数的类,我无法修改它,其中包含许多我希望用 Jackson 序列化的最终字段。有没有办法强制 jackson 序列化所有最后的字段?

我尝试过使用自定义过滤器提供程序,如下所示: new ObjectMapper().setFilterProvider(new SimpleFilterProvider().addFilter("serialize-final", SimpleBeanPropertyFilter.serializeAll())) 但 Jackson 似乎在应用我的过滤器之前/之后过滤掉了最终字段。

用例是我的程序依赖于一个使用功能标志来指示启用哪些功能的库。该库的分发者已将功能标志编译到我可以在运行时访问的单例对象上的最终字段中。我希望添加在请求时转储功能标志的功能,以便更轻松地进行调试并简单地序列化它们,因为 JSON 似乎是最简单的解决方案。

最佳答案

我假设单例没有用于最终字段的 setter/getter (否则它可以开箱即用)。您可以按照 this answer 中的建议使用字段可见性检查器。 :

    public class SerializeFinalFields {

@Test
public void doTest() throws JsonProcessingException {
final TestClass t = new TestClass("flag");
final ObjectMapper om = new ObjectMapper();
// Older jackson versions:
// om.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
// om.setVisibility(
// om.getSerializationConfig().getDefaultVisibilityChecker()
// .withFieldVisibility(JsonAutoDetect.Visibility.ANY));
// newer jackson versions:
om.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

final String json = om.writeValueAsString(t);
System.out.println(json);
}

}

class TestClass {

private final String myField;

/* package */ TestClass(final String myField) {
this.myField = myField;
}
}

关于java - Jackson 强制序列化最终字段而无需注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60398730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com