Annotation Type Swap


Associates ObjectSwap and Surrogate classes with POJOs and bean properties.

Can be used in the following locations:

  • Classes.
  • Bean getters/setters/fields.
  • @Rest-annotated classes and @RestOp-annotated methods when an on() value is specified.
See Also:
  • Element Details

    • impl

      The ObjectSwap and Surrogate class.

      A synonym for value().

      Returns:
      The annotation value.
      Default:
      void.class
    • mediaTypes

      Identifies the media types that this swap is applicable for.

      In the following example, the swap is only invoked by the JSON serializer:

      @Swap(impl=ToStringSwap.class, mediaTypes="*/json") public class MyBean { ... } public class ToStringSwap extends ObjectSwap<Object,String> { public String swap(BeanSession session, Object value) throws Exception { return value.toString(); } }

      See Also:
      Returns:
      The annotation value.
      Default:
      {}
    • on

      Dynamically apply this annotation to the specified classes/methods/fields.

      Used in conjunction with BeanContext.Builder.applyAnnotations(Class...) to dynamically apply an annotation to an existing class. It is ignored when the annotation is applied directly to classes.

      Valid patterns:
      • Classes:
        • Fully qualified:
          • "com.foo.MyClass"
        • Fully qualified inner class:
          • "com.foo.MyClass$Inner1$Inner2"
        • Simple:
          • "MyClass"
        • Simple inner:
          • "MyClass$Inner1$Inner2"
          • "Inner1$Inner2"
          • "Inner2"
      • Methods:
        • Fully qualified with args:
          • "com.foo.MyClass.myMethod(String,int)"
          • "com.foo.MyClass.myMethod(java.lang.String,int)"
          • "com.foo.MyClass.myMethod()"
        • Fully qualified:
          • "com.foo.MyClass.myMethod"
        • Simple with args:
          • "MyClass.myMethod(String,int)"
          • "MyClass.myMethod(java.lang.String,int)"
          • "MyClass.myMethod()"
        • Simple:
          • "MyClass.myMethod"
        • Simple inner class:
          • "MyClass$Inner1$Inner2.myMethod"
          • "Inner1$Inner2.myMethod"
          • "Inner2.myMethod"
      • Fields:
        • Fully qualified:
          • "com.foo.MyClass.myField"
        • Simple:
          • "MyClass.myField"
        • Simple inner class:
          • "MyClass$Inner1$Inner2.myField"
          • "Inner1$Inner2.myField"
          • "Inner2.myField"
      • A comma-delimited list of anything on this list.
      See Also:
      Returns:
      The annotation value.
      Default:
      {}
    • onClass

      Dynamically apply this annotation to the specified classes.

      Identical to on() except allows you to specify class objects instead of a strings.

      See Also:
      Returns:
      The annotation value.
      Default:
      {}
    • template

      Identifies a template string along with this swap.

      Template strings are arbitrary strings associated with swaps that help provide additional context information for the swap class. They're called 'templates' because their primary purpose is for providing template names, such as Apache FreeMarker template names.

      The following is an example of a templated swap class used to serialize POJOs to HTML using FreeMarker:

      // Our templated swap class. public class FreeMarkerSwap extends ObjectSwap<Object,Reader> { public MediaType[] forMediaTypes() { return MediaType.forStrings("*/html"); } public Reader swap(BeanSession session, Object value, String template) throws Exception { return getFreeMarkerReader(template, value); // Some method that creates raw HTML. } }

      @Swap(impl=FreeMarkerSwap.class, template="MyPojo.div.ftl") public class MyPojo {}

      See Also:
      Returns:
      The annotation value.
      Default:
      ""
    • value

      The ObjectSwap and Surrogate class.

      A synonym for impl().

      Returns:
      The annotation value.
      Default:
      void.class