Как создать аннотацию, которая представляет собой группу аннотаций Джексона?

Примерно через год я прочитал статью, в которой объяснялось, как я могу создать аннотацию, которая в основном является контейнером для других аннотаций. Таким образом, если я всегда использую одни и те же 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();
)

Мой сценарий состоит в том, что у меня есть куча сценариев использования, которые могут обрабатываться одним и тем же сериализатором с разными конфигами. Чтобы сделать все проще и прозрачнее, я хочу обернуть конфигурацию Джексона и конфигурацию сериализатора в одну аннотацию.

2 ответа

Решение

Для Джексона это может быть сделано с @JacksonAnnotationsInside мета-аннотаций. Смотрите эту статью больше, но фрагмент кода оттуда:

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

и с этого момента вы можете использовать этот тип для своих классов:

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

Здесь есть несколько примеров того, как создавать различные комбинации аннотаций, содержащих другие аннотации. Это то, что вы ищете?

Пример из источника:

@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) }
)
Другие вопросы по тегам