Annotation Type CompiledJson


  • @Target({TYPE,CONSTRUCTOR,METHOD})
    @Retention(CLASS)
    public @interface CompiledJson
    Compile time data-binding annotation. Objects with this annotation will have their serializers/deserializers created during project compilation. They will be registered into META-INF/services/com.dslplatform.json.CompiledJson and should be loaded during DslJson initialization.

    If classes with this annotation reference another class which doesn't have this annotation, annotation processor will behave as they have @CompiledJson annotation (this can be controlled via compiler option). This can be used to create converters for objects which can't be modified.

    • Optional Element Summary

      Optional Elements 
      Modifier and Type Optional Element Description
      java.lang.Class deserializeAs
      Perform deserialization into a different type.
      java.lang.String discriminator
      When used in mixin which doesn't have deserializeAs "discriminator":signature will be injected into JSON.
      CompiledJson.Format[] formats
      JSON can be encoded/decoded in several ways:
      - object - standard attribute: value pair, eg: {"prop":123,"attr":"abc"}
      - array - no attributes, just values in array, eg: [123,"abc"]
      boolean minified
      Deprecated.
      java.lang.String name
      When used in mixin which doesn't have deserializeAs "$type":name will be injected into JSON.
      java.lang.Class namingStrategy  
      CompiledJson.ObjectFormatPolicy objectFormatPolicy
      Object format can be fine tuned to either:
      - always include all properties
      - serialize only some properties
      CompiledJson.Behavior onUnknown
      Specify how to handle unknown property during object processing.
      CompiledJson.TypeSignature typeSignature
      Abstract types used as properties by default include type signature information so they can be properly deserialized.
    • Element Detail

      • formats

        CompiledJson.Format[] formats
        JSON can be encoded/decoded in several ways:
        - object - standard attribute: value pair, eg: {"prop":123,"attr":"abc"}
        - array - no attributes, just values in array, eg: [123,"abc"]

        Array format [prop1, prop2, prop3] is useful when sending known format on both sides since it assumes fixed property order and all properties must be known by both sides. index() parameter can be used to control the ordering.

        Serialization will be done via the first available format.

        Returns:
        JSON format
        Default:
        {com.dslplatform.json.CompiledJson.Format.OBJECT}
      • objectFormatPolicy

        CompiledJson.ObjectFormatPolicy objectFormatPolicy
        Object format can be fine tuned to either:
        - always include all properties
        - serialize only some properties

        This can be defined per DslJson instance via omitDefaults property during initialization through: skipDefaultValues
        To fine tune the behavior on class level specific policy can be set on the class which will override the global setting.

        By default minimal serialization will only include properties which have non-default values. If some properties need to be always included regardless, this can be done via additional annotation on property level.

        Returns:
        object format policy
        Default:
        com.dslplatform.json.CompiledJson.ObjectFormatPolicy.DEFAULT
      • namingStrategy

        java.lang.Class namingStrategy
        Default:
        com.dslplatform.json.processor.NamingStrategy.class
      • minified

        @Deprecated
        boolean minified
        Deprecated.
        Deprecated: use namingStrategy = MinifiedNames.class instead JSON attribute names can be minified using builtin simplistic algorithm which results in smaller JSON and faster processing. This is useful when using JSON for persistence instead of public API or Javascript interoperability.
        Returns:
        should JSON properties use short names
        Default:
        false
      • onUnknown

        CompiledJson.Behavior onUnknown
        Specify how to handle unknown property during object processing. On classes, default behavior is to skip over it and go to the next property. In enums, default behavior is to fail instead of defaulting to first value. Fail will result in an IOException, while skip will continue processing JSON.
        Returns:
        should skip unknown properties
        Default:
        com.dslplatform.json.CompiledJson.Behavior.DEFAULT
      • typeSignature

        CompiledJson.TypeSignature typeSignature
        Abstract types used as properties by default include type signature information so they can be properly deserialized. Type signature is included with as additional "$type":"actual.type.name" property (at the start of the object). To disable inclusion of $type attribute, set this property to EXCLUDE.
        Returns:
        should include type signature in JSON
        Default:
        com.dslplatform.json.CompiledJson.TypeSignature.DEFAULT
      • deserializeAs

        java.lang.Class deserializeAs
        Perform deserialization into a different type. For abstract types it's often useful to specify a concrete implementation for deserialization. This is required if $type attribute is missing from the JSON.
        Returns:
        deserialize into a specified signature
        Default:
        com.dslplatform.json.CompiledJson.class
      • discriminator

        java.lang.String discriminator
        When used in mixin which doesn't have deserializeAs "discriminator":signature will be injected into JSON. If discriminator is not set, default value of $type will be used. When discriminator is used on class (in object format), additional property with name will be added to JSON, even when there is no underlying abstract class or interface.
        Returns:
        deserialization hint or additional serialization info
        Default:
        ""
      • name

        java.lang.String name
        When used in mixin which doesn't have deserializeAs "$type":name will be injected into JSON. If not specified name will be the class full name, otherwise it will use value provided here. Value must be unique across all mixin implementations. To change default discriminator '$type' to something else, use discriminator value. When both discriminator and name are set on class, additional serialization info will be added to JSON, even when there is no underlying abstract class or interface.
        Returns:
        deserialization hint or additional serialization info
        Default:
        ""