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

使用Play Framework 2.2,制作RESTfull API。

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

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

Json输出将包含JsonNode“myObjectId:1”。 例如。

IdentityInfo和IdentityReference会处理这个问题。

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

这有可能,怎么样? 我可以阅读一个链接,我可以阅读它或一个例子。

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

该注释的Javadoc表示它是:

元注释(在其他注释上使用的注释)用于指示不使用目标注释(使用此注释注释的注释),jackson应该使用它具有的元注释。 这可以通过使用容器注释来创建“组合注释”,这需要使用此注释以及它“包含”的所有注释进行注释。

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

 @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 { } 

然后你可以正常使用它,就像jackson注释一样

 @MyCustomAnnotation public Object myObject;