@JsonTypeInfo
コンパイル時に 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
値を直接 ( orを使用して) 渡そうとして1
もうまくいきません。
ここから他のExpression
クラスを見る: http://groovy.codehaus.org/api/org/codehaus/groovy/ast/expr/Expression.htmlFieldExpression
、おそらく仕事をするだろうと思いますが、できませんでしたそれを機能させます。