Annotation Type EntityFiltering


@Target(ANNOTATION_TYPE) @Retention(RUNTIME) @Documented public @interface EntityFiltering
Meta-annotation used to create entity filtering annotations for entity (model) classes and resource methods and resources.

Entity Data Filtering via annotations is supposed to be used to annotate:

  • entity classes (supported on both, server and client sides), and
  • resource methods / resource classes (server side)

In entity filtering, a entity-filtering annotation is first defined using the @EntityFiltering meta-annotation:

 @Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD })
 @Retention(value = RetentionPolicy.RUNTIME)
 @EntityFiltering
 public @interface DetailedView {

     public static class Factory extends AnnotationLiteral<DetailedView> implements DetailedView {

        public static DetailedView get() {
              return new Factory();
          }
     }
 }

Entity-filtering annotation should provide a factory class/method to create an instance of the annotation. Example of such factory can be seen in the DetailedView above. Such instances can be then passed to the client/server runtime to define/override entity-filtering scopes.

The defined entity-filtering annotation is then used to decorate a entity, it's property accessors or fields (more than one entity may be decorated with the same entity-filtering annotation):

 public class MyEntityClass {

     @DetailedView
     private String myField;

     ...
 }

At last, on the server-side, the entity-filtering annotations are applied to the resource or resource method(s) to which the entity-filtering should be applied:

 @Path("/")
 public class MyResourceClass {

     @GET
     @Produces("text/plain")
     @Path("{id}")
     @DetailedView
     public MyEntityClass get(@PathParam("id") String id) {
         // Return MyEntityClass.
     }
 }

At last, on the client-side, the entity-filtering annotations are passed to the runtime via Entity.entity() method and the entity-filtering scopes are then derived from the annotations:

 ClientBuilder.newClient()
     .target("resource")
     .request()
     .post(Entity.entity(myentity, "application/json", new Annotation[] {MyEntityClass.Factory.get()}));