Spring Boot REST API: не удалось преобразовать значение типа String в Long

Проблема:

Я сделал Restful API с помощью Spring Boot. Один из моих методов - это удаление, которое принимает объект Response и выполняет некоторые другие запросы, в конечном итоге удаляя объект из базы данных в зависимости от условий. Однако перед телом функции происходит сбой из-за несоответствия типов при попытке преобразовать String в Long. Я использую в запросе JSON, в котором не используется тип Long. Поэтому вместо этого я использую строку типа "id":"1", которая по какой-то причине не конвертируется. Есть ли у кого-нибудь предложения? Информация ниже

Объект ответа:

public class Response {

    private long id;
    private String key;
    private String value;
    private String group;
 
 
    public Response(String key, String value, String group) {
         this.key = key;
         this.value = value;
         this.group = group;
    }

Я использую GeneratedValue (strategy = GenerationType.IDENTITY) для автоматического создания идентификаторов. Не уверен, если актуально

Точка отказа:

Кажется, здесь не получилось. при попытке преобразовать JSON в объект ответа.

public ResponseEntity<String> deleteResponse(@RequestBody Response response) {

}

Есть ли причина, по которой вы не используете номер JSON? "key": 1

Billy Brown 30.03.2021 23:41

@BillyBrown Я считаю, что округление происходит во время преобразования, поскольку JSON не поддерживает long. Кто-нибудь может подтвердить?

Keenan Hillerbrand 30.03.2021 23:43

Это зависит от того, насколько велико число. Номера JSON, вероятно, анализируются как float или double в Java, которые все еще могут представлять большое количество long. В основном это зависит от ожидаемого размера идентификаторов. В противном случае, если вы хотите использовать строку для точности, измените внутренний тип на String (который вы можете преобразовать внутренне дальше по строке) или добавьте туда некоторый собственный синтаксический анализ (к сожалению, я не могу сказать, как это сделать. ).

Billy Brown 30.03.2021 23:48

Это может помочь (в обоих направлениях): stackoverflow.com/questions/4268872/… (см. Комментарий: «наоборот - @JsonDeserialize(as = Long.class)»

Thomas 30.03.2021 23:52

@KeenanHillerbrand Вы правы; точный диапазон числа JSON составляет ± 2 ^ 52. В общем, рекомендуется везде обрабатывать поля id как непрозрачные строки, чтобы клиенты не делали глупых вещей в зависимости от того, являются ли они целыми числами / UUID / чем-то еще.

chrylis -cautiouslyoptimistic- 30.03.2021 23:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
40
1

Ответы 1

Вы не должны передавать "id":"1", если хотите автоматическое преобразование. Вы должны передать json как этот "id": 1 (без кавычек на номере).

Другие вопросы по теме