2015-01-15 39 views
0

我想用杰克逊2.如何在不触及源代码的情况下向方法/构造函数参数添加注释?

class Item { 
    public Item(Long id) {} 
} 

脱/ seralize框架对象(没有源代码访问)到JSON我发现这个Add annotation to a parameter on a new method created with Javassist但是这种解决方案是基于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) { 
    } 
} 

然而,书写了所有相关的物体混入类几乎相同的内容似乎是错误的做法,所以我开始寻找方面。

添加在该项目的层次结构中的注释中的类很简单:

aspect DeclareJsonCreatorAspect { 
    declare @constructor: Item+.new(Long): @JsonCreator; 
} 

不过,我似乎无法找到一种方法来注释添加到使用方面的构造函数的参数! Aspectj in Action以及Google尚未提供答案。 这是可能的吗?

回答

0

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

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

相关问题