package ameba.db.ebean.jackson;
import com.fasterxml.jackson.databind.module.SimpleModule;
import io.ebean.EbeanServer;
import io.ebean.text.json.JsonContext;
import org.glassfish.hk2.api.ServiceLocator;
/**
* Jackson module that uses Ebean's JsonContext for serializing and deserializing entity beans.
*
* @author icode
*
*/
public class JacksonEbeanModule extends SimpleModule {
private final JsonContext jsonContext;
private final EbeanServer server;
private final ServiceLocator locator;
/**
* Construct with a JsonContext obtained from an EbeanServer.
*
* @param server ebean server
* @param locator service locator
*/
public JacksonEbeanModule(EbeanServer server, ServiceLocator locator) {
this.server = server;
this.jsonContext = server.json();
this.locator = locator;
}
/**
* {@inheritDoc}
*/
@Override
public String getModuleName() {
return "jackson-datatype-ebean-server-" + server.getName();
}
/**
* {@inheritDoc}
*
* Register the Ebean specific serialisers and deserialisers.
*/
@Override
public void setupModule(SetupContext context) {
FindSerializers serializers = new FindSerializers(jsonContext);
locator.inject(serializers);
locator.postConstruct(serializers);
context.addSerializers(serializers);
FindDeserializers deserializers = new FindDeserializers(jsonContext);
locator.inject(deserializers);
locator.postConstruct(deserializers);
context.addDeserializers(deserializers);
}
}