如何更改 Jackson 以检测 POJO 中的所有字段,而不仅仅是 public 个字段?

How to change Jackson to detect all fields in a POJO, other than only public ones?

当为项目使用 Spring Boot 时,Jackson 默认会从 Jsons 序列化对象。我意识到如果您的 POJO 中没有 public 访问器,例如 getters/setters 或 public 字段,Jackson 就会失败。

当我切换到 Gson 时,行为有所不同。它会检测所有字段,而不管它们的可见性。出于这个原因,我最终使用了 Gson。

我对切换我的 POJO 访问规则感到有点不舒服;它将强制对项目结构进行一些重构。

所以,使用 Gson 没问题,但是有没有办法改变 Jackson 的行为?

Jackson 确实支持从私有成员字段读取值,但默认情况下不支持。

您可以在 Spring 引导配置中全局配置行为,例如

jackson:
  visibility.field: any
  visibility.getter: none
  visibility.setter: none
  visibility.is-getter: none

(此配置只会查找成员字段,不再检查get、set和is方法)

您还可以使用 @JsonAutoDetect 注释对特定 class 进行相同的设置。

尝试在 ObjectMapper 级别设置可见性,

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