使用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行,以及需要为某个字段提供的任何其他注释。这变得太大了,我试图只创建一个自定义注释来完成所有这些事情。
这可能,怎么样?我可以通过链接了解它或示例。
答案 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;