Java make a separate annotation that combines a others

孤人 提交于 2019-12-22 11:18:04

问题


Working with Play Framework 2.2, making a RESTfull API.

In a model I'm using, I wanted to output(Json with Jackson) only the Id of a related object, not the entire object. I found how to do that, as follows:

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

The Json output will contain a JsonNode "myObjectId: 1". For instance.

The IdentityInfo and IdentityReference take care of this.

The problem is, wherever I want this, I have to paste down these 3 lines, along with any other annotations that need to be present for a certain field. This get grow too large and I'm trying to create just 1 custom annotation that does all these things together.

Is this possible, and how? A link where I can read about it or an example would be appreciated.


回答1:


To solve your problem you have to create an annotation annotated with JacksonAnnotationInside and annotations you want it to 'include'.

The Javadoc of that annotation says that it is:

Meta-annotation (annotations used on other annotations) used for indicating that instead of using target annotation (annotation annotated with this annotation), Jackson should use meta-annotations it has. This can be useful in creating "combo-annotations" by having a container annotation, which needs to be annotated with this annotation as well as all annotations it 'contains'.

For example for your case you'd have something like this:

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

Then you can use it normally as you would Jackson annotations

@MyCustomAnnotation
public Object myObject;


来源:https://stackoverflow.com/questions/23562005/java-make-a-separate-annotation-that-combines-a-others

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!