frontpage получает длинный идентификатор типа объекта из model.addAttribute теряет точность - PullRequest
1 голос
/ 30 апреля 2019

Подумайте, есть класс с именем 'User'.

public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    private Long id;

    private String username;

    //...get、set
}

Затем я пытаюсь перейти на страницу редактирования информации пользователя с помощью следующих кодов:

@GetMapping("edit")
public String edit(Model model, @RequestParam Long id) {
    model.addAttribute("entity", userService.findById(id));
    return "user/edit";
}

На странице «пользователь / редактирование» я пытаюсь получить правильное значение идентификатора, но не получилось. Значение идентификатора длинного типа всегда теряет точность, например, если значение идентификатора равно «94105929343041536», то получаю «94105929343041540».

1 Ответ

0 голосов
/ 30 апреля 2019

Какой бы ни была ваша главная страница, с Javascript, JSON и Angular возникает много проблем при работе с большими длинными значениями. К сожалению, вы не можете изменить способ округления этих значений. В любом из этих случаев я бы порекомендовал использовать конвертер для преобразования ваших длинных значений в String при извлечении / сохранении (используя что-то вроде AttributeConverter).

@Converter
public class LongStringConverter implements AttributeConverter<Long, String> {
    @Override
    public String convertToDatabaseColumn(Long value) {
        return Long.toString(value);
    }

    @Override
    public Long convertToEntityAttribute(String dbData) {
        return Long.parseLong(dbData);
    }
}

И затем вы можете добавить это в поле id:

@Convert(converter = LongStringConverter.class)

В зависимости от конкретного варианта использования доступны некоторые другие конвертеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...