如何解决使用自定义注释后无法读取JsonProperty
我有一个函数,在启动时会为每个Model类构造一个可序列化字段的列表。通过为类中的所有字段搜索v1 <- c(3,6,8,5,11,4,5)
批注并为字段名创建@APIField
来完成此操作。然后将其存储在Set<String>
中,并创建一个静态的类列表及其白名单字段。
稍后,当我使用自定义Map<Class,Set<String >>
进行序列化时,我检查@JsonFilter
是否包含在字段名集中,并让编写者进行序列化。 (在下面的代码段中)
在writer.getName()
与@JsonProperty("sname")
一起使用之前,所有这些工作正常。序列化使用字段名称而不是json属性名称进行。
这是场景:
@APIField
然后,
JsonFieldsListGenerator函数基本上为每个类生成 Class ShowClass {
@APIField
@Getter @Setter
private String firstName;
@APIField
@Getter @Setter
@JsonProperty("ln")
private String lastname;
}
,这些字段名将被序列化。代码段中的Map<Class,Set<String>>
是用于存储whiteListFields的全局变量。
whiteListedFieldsMap
然后我的序列化发生在覆盖的 Set<String> whiteListFields = new HashSet<>();
Arrays.stream(clazz.getDeclaredFields()).forEach(field -> {
if(field.isAnnotationPresent(APIField.class))
{
whiteListFields.add(field.getName());
}
});
whiteListedFieldsMap.put(clazz,whiteListFields);
方法中
serializeAsField
问题在于writer.getName()给我的姓氏是“ ln”,而whiteListedFields却包含了“ lastName”。
@Override
public void serializeAsField(Object pojo,JsonGenerator jgen,SerializerProvider provider,PropertyWriter writer)
throws Exception
{
Set<String> whiteListedFields = getWhiteListedFields(pojo.getClass());
if(whiteListedFields.contains(writer.getName()))
{
writer.serializeAsField(pojo,jgen,provider);
}
}
那么,如何在保持程序流程的同时使所有其他注释与我的@APIField一起正常工作?
是的,一种方法是使用其JsonProperty名称实际保存列入白名单的字段。 问题是,如果@JsonProperty无法正常工作,则可能还有其他可能无法正常工作。 因此,在没有任何胶带粘贴的情况下,如何确保@APIField以外的所有其他注解继续起作用(例如,@ JsonValue,@ JsonProperty等)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。