如何通过ObjectMapper序列化带私有Getter的私有字段?
解决私有字段(私有Getter)的Jackson序列化问题
给你几个实用的解决办法:
办法一:给字段加@JsonProperty注解
直接在私有字段上标注@JsonProperty,告诉Jackson要序列化这个字段,同时保留私有Getter供内部使用,外部依然调用不了getField()方法。
修改后的代码:
@Data public class TestClass { @JsonProperty @Getter(AccessLevel.PRIVATE) private String field; }
办法二:全局配置ObjectMapper允许访问私有字段
如果不想修改实体类,也可以给ObjectMapper做全局配置,让它能直接访问类的私有成员。
代码示例:
ObjectMapper objectMapper = new ObjectMapper(); // 允许Jackson访问所有字段,不管访问修饰符 objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
这个配置会影响所有被该ObjectMapper处理的类,适合需要统一处理多个类的场景。
办法三:类级别加@JsonAutoDetect注解
在TestClass上添加@JsonAutoDetect,指定字段可见性为ANY,这样Jackson就能访问类里的所有私有字段,同样不影响私有Getter的访问限制。
代码示例:
@Data @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) public class TestClass { @Getter(AccessLevel.PRIVATE) private String field; }
内容的提问来源于stack exchange,提问作者Zeyu Huang
相关产品推荐
相关产品推荐

