преобразование данных Jax RS

1

Я должен вернуть DTO из службы, который выглядит так:

ResponseDTO
{
  Long id;
  String name;
  //getter and setter etc.
}

Служба возвращает ответ в json-формате, и я использую org.codehaus.jackson.jaxrs.JacksonJsonProvider для преобразования, но на стороне клиента, когда я получаю ответ, тогда значение id изменяется автоматически.

например: - со стороны службы я установил значение id как Long.MAX_VALUE, но ответ json на стороне клиента показывает мне значение "9223372036854776000", которое не является значением, которое я отправляю из службы.

Я что-то упустил?

  • 0
    Таким образом, чтобы уточнить, вы устанавливаете ResponseDTO.id = 9223372036854775807 и получаете { "id": "922337203685477000", ... } ? Это кажется неправильным по нескольким причинам.
  • 0
    Да, похоже, это неправильно, но происходит.
Теги:
jackson
jax-rs

1 ответ

1
Лучший ответ

Дело в том, что Javascript обрабатывает все Number виде 64-битных чисел с плавающей точкой IEEE 754. Они не могут точно представлять 9223372036854775807 (значение Long.MAX_VALUE).

Это причина, по которой существует Feature.WRITE_NUMBERS_AS_STRINGS. Вам нужно включить эту функцию для получения фактического номера. Обратите внимание, что преобразование этого числа в Number прежнему приведет к 9223372036854776000 (округление вверх). См. Этот ответ, как работает округление в Javascript.

  • 0
    Да, работает нормально, спасибо
  • 0
    Пожалуйста.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню