0

我正在尝试使用 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 尚未提供答案。这是可能吗?

4

1 回答 1

0

目前 AFAIK AspectJ(当前为 v1.8.4)无法处理方法参数的注释,无论是在切入点还是在 ITD(类型间定义)语句中。

很抱歉我没有更好的消息,但这就是现状。如果您有机会通过 ITD 声明整个方法,您可以影响完整的签名,但是在现有方法上添加参数注释现在是不可能的。如果有帮助,您还可以通过 ITD 声明默认构造函数。我很确定有一种方法可以实现你想要的,只是可能不是你想象的那样。

于 2015-01-17T03:59:12.517 回答