Json 如何在不接触源代码的情况下向方法/构造函数参数添加注释?

Json 如何在不接触源代码的情况下向方法/构造函数参数添加注释?,json,spring,annotations,aspectj,aspect,Json,Spring,Annotations,Aspectj,Aspect,我正在尝试使用jackson 2对没有源代码访问的JSON框架对象进行de/seralize class Item { public Item(Long id) {} } 我发现了这一点,但该解决方案基于JavaAssist,并不完全适用: 根本的问题是缺少DefaultConstructor,这可以通过使用@JsonCreator注释和参数的匹配@JsonProperty注释来解决 @JsonCreator class Item { public Item(@JsonProp

我正在尝试使用jackson 2对没有源代码访问的JSON框架对象进行de/seralize

class Item {
    public Item(Long id) {}
}
我发现了这一点,但该解决方案基于JavaAssist,并不完全适用:

根本的问题是缺少DefaultConstructor,这可以通过使用@JsonCreator注释和参数的匹配@JsonProperty注释来解决

@JsonCreator
class Item {
    public Item(@JsonProperty("id") Long id) {}
}
我使用mixin类为许多item子类中的一个实现了这一点

public abstract class ItemChildMixin {
    @JsonCreator
    public ItemChildMixin(@JsonProperty("objId") final Long objId) {
    }
}
然而,为几乎相同内容的所有相关对象编写mixin类似乎是错误的方法,因此我开始研究方面

将注释添加到项目层次结构中的类很容易:

aspect DeclareJsonCreatorAspect {
    declare @constructor: Item+.new(Long): @JsonCreator;
}
但是,我似乎找不到一种方法来使用方面向构造函数参数添加注释! Aspectj和谷歌都没有给出答案。
这是可能的吗?

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

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