如何将 jackson 指定为仅使用字段 - 最好是全局字段

2022-08-31 05:59:59

默认的 jackon 行为似乎同时使用属性(getters 和 setter)和字段来序列化和反序列化为 json。

我想使用这些字段作为序列化配置的规范源,因此根本不希望 jackson 查看属性。

我可以通过注释在单个类的基础上执行此操作:

 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)

但我不想把这个放在每一堂课上......

是否可以全局配置此项?喜欢向对象映射器添加一些?


答案 1

您可以像这样配置各个对象映射器:

ObjectMapper mapper  = new ObjectMapper();
mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));

如果您希望全局设置它,我通常通过包装类访问已配置的映射器。


答案 2

在 Jackson 2.0 及更高版本中,您可以简单地使用:

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;   

...

ObjectMapper mapper = new ObjectMapper();    
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

以关闭自动检测。