我正在尝试使用 jackson 2 将框架对象(无源代码访问)反序列化为 JSON。
class Item {
public Item(Long id) {}
}
我在使用 Javassist 创建的新方法上发现了这个 Add annotation to a parameter但这个解决方案基于 JavaAssist 并且不完全适用:(
根本问题是缺少 DefaultConstructors,可以使用 @JsonCreator 注释和参数的匹配 @JsonProperty 注释来解决。
@JsonCreator
class Item {
public Item(@JsonProperty("id") Long id) {}
}
我设法使用 mixin 类为众多项目子类之一实现了这一点。
public abstract class ItemChildMixin {
@JsonCreator
public ItemChildMixin(@JsonProperty("objId") final Long objId) {
}
}
然而,为所有具有几乎相同内容的相关对象编写 mixin 类似乎是错误的方法,所以我开始研究方面。
将注释添加到项目层次结构中的类很容易:
aspect DeclareJsonCreatorAspect {
declare @constructor: Item+.new(Long): @JsonCreator;
}
但是,我似乎找不到使用 Aspects 向构造函数参数添加注释的方法!Aspectj in Action 以及 google 尚未提供答案。这是可能吗?