5. Binary Converters - aegisql/conveyor GitHub Wiki
ObjectConverter is a simple interface for bi-directional object conversions. Talking specifically about conveyor persistence needs, it is intended to support conversion of data into a storable formats, such as strings and byte arrays, and back.
public interface ObjectConverter <O,P> {
P toPersistence(O obj);
O fromPersistence(P p);
String conversionHint();
}
Simple Example
public class IntegerToStringConverter implements ObjectConverter<Integer,String> {
@Override
public String toPersistence(Integer obj) {
return obj.toString();
}
@Override
public Integer fromPersistence(String p) {
return Integer.valueOf(p);
}
@Override
public String conversionHint() {
return "Integer:String";
}
}
I believe, the idea is clear.
In the conveyor-persistence-core module we provide converters for most of common Java classes, arrays, collections and maps.
Converter Class Name | From type | To Type |
---|---|---|
BigDecimalToBytesConverter | BigDecimal | byte[] |
BigIntegerToBytesConverter | BigInteger | byte[] |
BooleanToBytesConverter | Boolean | byte[] |
ByteToBytesConverter | Byte | byte[] |
CartToBytesConverter | Cart | byte[] |
CharToBytesConverter | Char | byte[] |
ClassToBytesConverter | Class | byte[] |
DateToBytesConverter | Date | byte[] |
DoubleToBytesConverter | Double | byte[] |
EncryptingConverter | byte[] | encrypted byte[] |
EnumToBytesConverter | Any enum type | byte[] |
FloatToBytesConverter | Float | byte[] |
IntegerToBytesConverter | Integer | byte[] |
LongToBytesConverter | Long | byte[] |
NullConverter | null value of any type | null |
ObjectToJsonBytesConverter | Any Jackson acceptable object | byte[] |
ObjectToJsonStringConverter | Any Jackson acceptable object | String |
SerializableToBytesConverter | Any Serializable object | byte[] |
ShortToBytesConverter | Short | byte[] |
StringToBytesConverter | String | byte[] |
UuidToBytesConverter | UUID | byte[] |
SqlDateToBytesConverter | java.sql.Date | byte[] |
SqlTimeToBytesConverter | java.sql.Time | byte[] |
SqlTimestampToBytesConverter | java.sql.Timestamp | byte[] |
Converter Class Name | From type | To Type |
---|---|---|
BigDecimalsToBytesConverter | BigDecimal[] | byte[] |
BigIntegersToBytesConverter | BigInteger[] | byte[] |
BoolPrimToBytesConverter | boolean[] | byte[] |
BooleansToBytesConverter | Boolean[] | byte[] |
BytesPrimToBytesConverter | byte[] | byte[] |
BytesToBytesConverter | Byte[] | byte[] |
CharPrimToBytesConverter | char[] | byte[] |
CharactersToBytesConverter | Char[] | byte[] |
ClassesToBytesConverter | Class[] | byte[] |
DatesToBytesConverter | Date[] | byte[] |
DoublePrimToBytesConverter | double[] | byte[] |
DoublesToBytesConverter | Double[] | byte[] |
FloatPrimToBytesConverter | float[] | byte[] |
FloatsToBytesConverter | Float[] | byte[] |
IntPrimToBytesConverter | int[] | byte[] |
IntegersToBytesConverter | Integer[] | byte[] |
LongPrimToBytesConverter | long[] | byte[] |
LongsToBytesConverter | Long[] | byte[] |
ShortPrimToBytesConverter | short[] | byte[] |
ShortsToBytesConverter | Short[] | byte[] |
StringsToBytesConverter | String[] | byte[] |
UuidsToBytesConverter | UUID[] | byte[] |
SqlDatesToBytesConverter | java.sql.Date[] | byte[] |
SqlTimesToBytesConverter | java.sql.Time | byte[] |
SqlTimestampsToBytesConverter | java.sql.Timestamp | byte[] |
Converter Class Name | From type | To Type |
---|---|---|
CollectionToByteArrayConverter | Collection of any Convertable by ObjectConverter type | byte[] |
MapToByteArrayConverter | Map, where keys and values are convertable by ObjectConverter types | byte[] |
ConverterAdviser is a registry for converters. It comes pre-seeded with all above listed converters, but you can always add your own converters.
ConverterAdviser uses conversionHint to find right convertor. conversionHint must be a unique String across all converters used by your application. If there is no appropriate ObjectConvertor in the registry and Object is of Serializable class, then Serializable converter will be used.
Generic parameter for the Class is a Label Type.
Example of code, registering JSON converter for user's class
ConverterAdviser<String> ca = new ConverterAdviser<>();
ca.addConverter(MyClass.class, new ObjectToJsonBytesConverter<MyClass>(MyClass.class));
If you used Encrypted Persistence, then you must configure the Adviser with the same encryption settings.