java - Jackson 使用 getter 反序列化字段
问题描述
我有杰克逊这样设置。
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
这样它只会序列化带有注释的字段和函数@JsonProperty
,这正是我想要的。但是它用于java.lang.reflect.Field.get(bean)
获取字段的值。
如果我可以让 Jackson 使用 getter 访问字段值,我会更喜欢它。
有什么办法可以使这成为可能吗?
更新
我调试了一下,发现
public void serializeAsField(Object bean, JsonGenerator gen,
SerializerProvider prov) throws Exception {
// inlined 'get()'
final Object value = (_accessorMethod == null) ? _field.get(bean)
: _accessorMethod.invoke(bean, (Object[]) null);
在BeanPropertyWriter
. _accessorMethod
顺便说一句是空的。
更新 2
这是我要序列化的类之一。
import lombok.Data;
@Data
public class JwtAuthenticationResponse{
private final String token;
}
Getter 是使用 lombok 的 @Data Annotation 生成的。
更新 3
我进一步调试并最终得到一个POJOPropertiesCollector._removeUnwantedAccessor(props)
.
它删除了先前找到的访问器,因为它的可见性已用objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
.
由于我使用的是 lombok,因此我不能在 getter 上使用任何 @Json*** 注释。这就是为什么我决定只使用字段来确定将被序列化的属性。但我一直想使用他们适当的 getter 作为值访问器。
有没有办法做到这一点?
解决方案
推荐阅读
- flutter - 如何在 Flutter 中的 FCM 的默认通道中将声音添加到背景通知中?
- javascript - Express 路由中的正则表达式
- macos - mac上的QT QSystemTrayIcon在第二屏被压扁
- kubernetes - 在 k8s 容器中将环境变量与其他环境变量组合起来
- c# - Task.FromCanceled 的目的是什么
- java - 普罗米修斯我设置了scrape_interval 1d
- javascript - 如何在python中解析未定义为字符串的javascript对象
- ios - 线程 1:“-[ToDoListApp.ViewController delete:]:无法识别的选择器发送到实例 0x7fc13dc13bb0”
- spring - GKE:找不到主类
- python - 如何检查索引 0 是否与列表中的索引 1 匹配?例如,检查用户名是否与给定的密码匹配,希望这是有意义的