2012-11-15 2 views
19

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(); 
) 

내 시나리오 내가 다른 CONFIGS와 같은 시리얼 라이저에 의해 처리 될 수 직렬화 사용 사례의 무리를 가지고있다 :

편집

는 내가 원하는 같은입니다. 모든 것을 더 사용하기 쉽고 더 투명하게 만들기 위해 잭슨 설정과 시리얼 라이저 설정을 하나의 주석으로 묶고 싶습니다.

답변

15

,이는 @JacksonAnnotationsInside 메타 주석을 수행 할 수 있습니다. 거기에서 이상 this article하지만, 코드를 참조하십시오 :

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

및 그에서 당신과 같이 자신의 클래스 유형을 사용할 수 있습니다

@MyStdAnnotations 
public class MyBean { 
    public String name, id; 
} 
2

here 다른 주석이 포함 된 주석의 다양한 조합을 만드는 방법에 대한 몇 가지 예가 있습니다. 이게 니가 찾고있는거야? 소스에서

예 : 다음과 같이 사용

@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) } 
) 
+0

을 난 내 편집이 좀 더 모든 것을 만들어 희망 분명 – Laures

+0

흠. 그래서'SerializerUseCase01'을 (구현 세부 사항으로 감추어 져있는) 다른 인터페이스들에 대한 별칭과 비슷한 것으로하고 싶습니다. 맞습니까? – Thor84no

+0

수정. 그러나 나는 숨길 수있는 주석이'@Target ({ElementType.ANNOTATION_TYPE, ...} '으로 표시되어서는 안되기 때문에 더 이상 가능하지 않다. – Laures

관련 문제