2
我試圖在編譯期間使用AST將@JsonTypeInfo
註釋添加到我的類中。Groovy AST - 使用枚舉添加類註解
添加應該出來作爲(使用類作爲示例)註解:
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="className")
凡JsonTypeInfo.Id
定義爲:
public enum Id {
NONE(null),
CLASS("@class"),
MINIMAL_CLASS("@c"),
NAME("@type"),
CUSTOM(null)
;
}
和JsonTypeInfo.As
被定義爲:
public enum As {
PROPERTY,
WRAPPER_OBJECT,
WRAPPER_ARRAY,
EXTERNAL_PROPERTY
;
}
兩個JsonTypeInfo
類中。
要添加註釋,我有一個函數setJson()
,就像這樣:
public static void setJson(ClassNode cn)
{
AnnotationNode an = new AnnotationNode(new ClassNode(com.fasterxml.jackson.annotation.JsonTypeInfo.class));
an.addMember("use", new ConstantExpression(JsonTypeInfo.Id.CLASS));
an.addMember("include", new ConstantExpression(JsonTypeInfo.As.PROPERTY));
an.addMember("property", new ConstantExpression("className"));
cn.addAnnotation(an);
}
然而,只有property
成員似乎沒有一個問題來設定。當我運行其餘的時候,我得到如下錯誤:
"Expected enum value for attribute use in @com.fasterxml.jackson.annotation.JsonTypeInfo"
如何在AST轉換過程中正確傳入Enum值?嘗試直接傳遞值(即使用CLASS
或1
)不起作用。
翻翻另一個Expression
這裏的班級:http://groovy.codehaus.org/api/org/codehaus/groovy/ast/expr/Expression.html,我想也許FieldExpression
會完成這項工作,但是我一直無法完成這項工作。
不得不修改'ClassExpression'來取'ClassNode',但就是這樣!新的PropertyExpression( )新的ClassExpression(新的ClassNode(com.fasterxml.jackson.annotation.JsonTypeInfo.Id.class)), new ConstantExpression(JsonTypeInfo.Id.CLASS)));' – divillysausages
有用!我愛你們!我那麼愛你! –