2015-01-15 42 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聲明默認的構造函數。我很確定有一種方法可以實現你想要的,也許不是你想象的方式。

相關問題