-
Notifications
You must be signed in to change notification settings - Fork 92
JSON Serialization
It is possible to tell Achilles to serialize any unsupported data type into an JSON string using the @JSON
annotation.
//Simple value encoding
@Column
@JSON
private MyPOJO pojoAsJson;
//Collection value encoding
@Column
@JSON // or @JSON(value=true)
private List<MyPOJO> myPojosAsJson;
//Map key encoding
@Column
@JSON(key=true, value=false)
private Map<MyPOJO, String> mapKeyEncoding;
//Map value encoding
@Column
@JSON // or @JSON(value=true)
private Map<Integer,MyPOJO> mapValueEncoding;
JSON serialization is way faster than the old plain Object serialization since only data are serialized, not class structure.
By default, Achilles sets up an internal Object Mapper with the following feature config:
- SerializationInclusion = JsonInclude.Include.NON_NULL
- DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES = false
- MapperFeature.SORT_PROPERTIES_ALPHABETICALLY = true
- AnnotationIntrospector pair : primary = JacksonAnnotationIntrospector, secondary = JaxbAnnotationIntrospector
Jackson will serialize all your entities even if they do not have any JSON annotations. You can also use JAXB annotations.
## Custom Object Mapper
It is possible to inject a pre-configured Jackson Object Mapper as configuration parameter to bootstrap the PersistenceManagerFactory
class using the OBJECT_MAPPER parameter.
Map<ConfigurationParameters,Object> configMap = new HashMap<>();
configMap.put(JACKSON_MAPPER, preConfiguredObjectMapper);
...
PersistenceManagerFactory pmf = PersistenceManagerFactoryBuilder.build(configMap);
## Custom Jackson Mapper Factory
Last but not least, it is possible to further custom JSON serialization using the ObjectMapperFactory
interface using the JACKSON_MAPPER_FACTORY parameter:
public interface JacksonMapperFactory
{
public <T> ObjectMapper getMapper(Class<T> type);
}
Map<ConfigurationParameters,Object> configMap = new HashMap<>();
configMap.put(JACKSON_MAPPER_FACTORY, customJacksonMapperFactoryImpl);
...
PersistenceManagerFactory pmf = PersistenceManagerFactoryBuilder.build(configMap);
When both JACKSON_MAPPER_FACTORY and JACKSON_MAPPER params are provided for configuration, Achilles will ignore the JACKSON_MAPPER param and only use the JACKSON_MAPPER_FACTORY one
-
Bootstraping Achilles at runtime
- Runtime Configuration Parameters
-
Manager
-
Consistency Level
-
Cassandra Options at runtime
-
Lightweight Transaction (LWT)
-
JSON Serialization
-
Interceptors
-
Bean Validation (JSR-303)