Java 制作了一个单独的注解,结合了其他注解

Kdg*_*Dev 6 java annotations jackson playframework-2.0

使用 Play Framework 2.2,制作 RESTfull API。

在我使用的模型中,我只想输出(Json with Jackson)相关对象的 Id,而不是整个对象。我找到了如何做到这一点,如下所示:

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIdentityReference(alwaysAsId = true)
@JsonIgnore
public Object myObject;
Run Code Online (Sandbox Code Playgroud)

Json 输出将包含一个 JsonNode "myObjectId: 1"。例如。

IdentityInfo 和 IdentityReference 负责处理这个问题。

问题是,无论我想要什么,我都必须粘贴这 3 行,以及某个字段需要存在的任何其他注释。这变得太大了,我正在尝试创建 1 个自定义注释来一起完成所有这些事情。

这是可能的,如何?一个我可以阅读它的链接或一个例子将不胜感激。

lpi*_*ora 7

要解决您的问题,您必须创建一个用JacksonAnnotationInside注释的注释和您希望它“包含”的注释。

该注释的 Javadoc 说它是:

元注解(在其他注解上使用的注解)用于指示杰克逊应该使用它拥有的元注解而不是使用目标注解(用此注解进行注解)。这在通过具有容器注释来创建“组合注释”时非常有用,容器注释需要使用此注释以及它“包含”的所有注释进行注释。

例如对于你的情况,你会有这样的事情:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@com.fasterxml.jackson.annotation.JacksonAnnotationsInside // this is important
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIdentityReference(alwaysAsId = true)
public @interface MyCustomAnnotation {    
}
Run Code Online (Sandbox Code Playgroud)

然后您可以像使用 Jackson 注释一样正常使用它

@MyCustomAnnotation
public Object myObject;
Run Code Online (Sandbox Code Playgroud)