47

1年ほどで、基本的に他の注釈のコンテナである注釈を作成する方法を説明した記事を読みました。このように、特定のユースケースで常に同じ5つの注釈を使用する場合は、それらを含む注釈を作成し、代わりにそれを使用します。

残念ながら、私はもう記事を見つけることができません、そして私のジャクソン構成のために今それを本当にしたいと思います。

自分では情報が見つからないので、記憶に疑問を持ち始めています。これは可能ですか、それとも私は間違っていますか?

編集

私が欲しいのは次のようなものです:

@Target(ElementType.METHOD)
@com.fasterxml.jackson.databind.annotation.JsonSerialize(using=MySerializerThatIsUsedEverywhere.class
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(MyCustomXmlAdapter.class)
@SomeOtherEvaluatedByTheSerializer
public @interface SerializerUseCase01 {
    public String a();
    public int b();
)

私のシナリオは、異なる構成の同じシリアライザーで処理できるシリアル化のユースケースがたくさんあるというものです。すべてを使いやすく、より透過的にするために、jackson構成とserializer構成を1つのアノテーションにラップしたいと思います。

4

2 に答える 2

43

@JacksonAnnotationsInsideジャクソンの場合、これはメタアノテーションを使用して実行できます。詳細についてはこの記事を参照してくださいが、そこからのコードスニペットは次のとおりです。

@Retention(RetentionPolicy.RUNTIME) // IMPORTANT
@JacksonAnnotationsInside
@JsonInclude(Include.NON_NULL)
@JsonPropertyOrder({ "id", "name" }) 
public @interface MyStdAnnotations

そこから、次のように独自のクラスにこのタイプを使用できます。

@MyStdAnnotations
public class MyBean {
   public String name, id;
}
于 2012-11-16T00:48:32.080 に答える
4

他の注釈を含む注釈のさまざまな組み合わせを作成する方法について、ここにいくつかの例があります。これはあなたが探しているものですか?

ソースからの例:

@Target(ElementType.METHOD)
public @interface SimpleAnnotation {
    public String a();
    public int b();
)

@Target(ElementType.METHOD)
public @interface ReallyComplexAnnotation {
    public SimpleAnnotation[] value();
)

このように使用されます:

@ReallyComplexAnnotation(
    { @SimpleAnnotation(a="...", b=3), @SimpleAnnotation(a="...", b=4) }
)
于 2012-11-15T16:17:00.813 に答える