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