问题
默认的jackon行为似乎使用两个属性(getter和setter)和字段来序列化和反序列化为json。
我想使用这些字段作为序列化配置的规范来源,因此不希望jackson完全查看属性。
我可以使用注释在单个类的基础上执行此操作:
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
但我不想把它放在每一堂课......
是否可以全局配置?喜欢在Object Mapper中添加一些?
#1 热门回答(126 赞)
你可以像这样配置各个ObjectMappers:
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
如果你想全局设置,我通常通过包装类访问配置的映射器。
#2 热门回答(115 赞)
在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);
关闭自动检测。
#3 热门回答(22 赞)
具体为boolean is*()
getters:
我花了很多时间:为什么都没有
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
没有
setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
不适用于我的布尔getter / setter。解决方案很简单:
@JsonAutoDetect(isGetterVisibility = Visibility.NONE, ...
setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);