Проблема:
Я сделал 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) {
}
@BillyBrown Я считаю, что округление происходит во время преобразования, поскольку JSON не поддерживает long. Кто-нибудь может подтвердить?
Это зависит от того, насколько велико число. Номера JSON, вероятно, анализируются как float или double в Java, которые все еще могут представлять большое количество long. В основном это зависит от ожидаемого размера идентификаторов. В противном случае, если вы хотите использовать строку для точности, измените внутренний тип на String (который вы можете преобразовать внутренне дальше по строке) или добавьте туда некоторый собственный синтаксический анализ (к сожалению, я не могу сказать, как это сделать. ).
Это может помочь (в обоих направлениях): stackoverflow.com/questions/4268872/… (см. Комментарий: «наоборот - @JsonDeserialize(as = Long.class)»
@KeenanHillerbrand Вы правы; точный диапазон числа JSON составляет ± 2 ^ 52. В общем, рекомендуется везде обрабатывать поля id как непрозрачные строки, чтобы клиенты не делали глупых вещей в зависимости от того, являются ли они целыми числами / UUID / чем-то еще.




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