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

时间:2014-05-09 10:13:19

标签: java annotations playframework-2.0 jackson

使用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行,以及需要为某个字段提供的任何其他注释。这变得太大了,我试图只创建一个自定义注释来完成所有这些事情。

这可能,怎么样?我可以通过链接了解它或示例。

1 个答案:

答案 0 :(得分:4)

要解决您的问题,您必须创建一个注释为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 {    
}

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

@MyCustomAnnotation
public Object myObject;