Я не вижу проблемы, которую вы описываете. Если у меня есть объект домена, который выглядит примерно так:
class Person {
String firstName
String lastName
byte bytePrimitiveValue = 8;
float floatPrimitiveVal = 4.38;
Byte byteValue = 9;
Float floatVal = 5.06;
}
и вы вставляете его в базу данных примерно так:
def person = new Person1(firstName: "the name", lastName: "smith")
person.save()
Я вижу ожидаемые типы в базе данных:
{
"_id" : NumberLong(7),
"bytePrimitiveValue" : 8,
"byteValue" : 9,
"firstName" : "the name",
"floatPrimitiveVal" : 4.380000114440918,
"floatVal" : 5.059999942779541,
"lastName" : "smith",
"version" : 0
}
Как для примитивов byte и float, так и для значений Byte и Float они вставляются в базу данных как правильные числовые типы, а не как строки. Я заметил, что если вы используете def
для определения полей в объекте вашего домена, поле вообще не сохраняется, я полагаю, что он использует тип поля, чтобы определить, как преобразовать его в представление BSON, требуемое MongoDB.
Итак, в заключение я не считаю, что вам нужно писать собственный маршаллер, я считаю, что это что-то вроде того, как вы определяете объект домена.
10.06.2013