frontpage从model.addAttribute获取对象的long类型id丢失精度

问题描述 投票:1回答:1

认为有一个名为'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";
}

在“用户/编辑”页面中,我尝试获取正确的id值,但是失败。长类型id的值总是失去精度,如果id的值是“94105929343041536”,我得到的是“94105929343041540”。

java spring spring-boot spring-mvc
1个回答
0
投票

无论您的首页是什么,在处理大型长值时,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)

根据您的确切用例,还有一些其他转换器可用。

© www.soinside.com 2019 - 2024. All rights reserved.