Я пытаюсь сериализовать объект с длинным идентификатором в JSON, используя Genson.
Хорошо работает, если я сериализую в JSON и вернусь в Java.Но я десериализирую в JavaScript.
JavaScript не может поддерживать полное 64-битное без знака int в виде числа (я обнаружил, что последние несколько бит моего идентификатора обнуляютсяв JavaScript), поэтому мне нужно преобразовать длинный идентификатор в строку во время сериализации.
Я не хочу преобразовывать все длинные в объекте, поэтому я пытаюсь использовать конвертер только дляполе id.
import com.owlike.genson.annotation.JsonConverter;
import javax.persistence.Id;
import lombok.Getter;
import lombok.Setter;
...
/** the local database ID for this order */
@JsonConverter(LongToStringConverter.class)
@Id
@Setter
@Getter
private Long id;
/** The unique ID provided by the client */
@Setter
@Getter
private Long clientKey;
Мой код конвертера выглядит следующим образом:
public class LongToStringConverter implements Converter<Long> {
/** Default no-arg constructor required by Genson */
public LongToStringConverter() {
}
@Override
public Long deserialize(ObjectReader reader, Context ctx) {
return reader.valueAsLong();
}
@Override
public void serialize(Long obj, ObjectWriter writer, Context ctx) {
if (obj != null) {
writer.writeString(obj.toString());
}
}
}
Я не делаю ничего особенного при вызове самой сериализации:
Genson genson = new GensonBuilder().useIndentation(true).create();
String json = genson.serialize( order );
Thisне работаетВывод по-прежнему выглядит следующим образом:
{
"clientKey":9923001278,
"id":1040012110000000002
}
Я пытаюсь добиться следующего:
{
"clientKey":9923001278,
"id":"1040012110000000002" // value is quoted
}
Я также пытался передать свой конвертер в GensonBuilder, но он ударил по всемДолго в объекте, а это не то, что мне нужно.
Любой совет?