Я должен вернуть DTO из службы, который выглядит так:
ResponseDTO
{
Long id;
String name;
//getter and setter etc.
}
Служба возвращает ответ в json-формате, и я использую org.codehaus.jackson.jaxrs.JacksonJsonProvider
для преобразования, но на стороне клиента, когда я получаю ответ, тогда значение id изменяется автоматически.
например: - со стороны службы я установил значение id как Long.MAX_VALUE, но ответ json на стороне клиента показывает мне значение "9223372036854776000", которое не является значением, которое я отправляю из службы.
Я что-то упустил?
Дело в том, что Javascript обрабатывает все Number
виде 64-битных чисел с плавающей точкой IEEE 754. Они не могут точно представлять 9223372036854775807
(значение Long.MAX_VALUE
).
Это причина, по которой существует Feature.WRITE_NUMBERS_AS_STRINGS. Вам нужно включить эту функцию для получения фактического номера. Обратите внимание, что преобразование этого числа в Number
прежнему приведет к 9223372036854776000
(округление вверх). См. Этот ответ, как работает округление в Javascript.
ResponseDTO.id = 9223372036854775807
и получаете{ "id": "922337203685477000", ... }
? Это кажется неправильным по нескольким причинам.