frontpage从model.addAttribute获取对象的长类型ID失去精度

时间:2019-04-30 09:15:44

标签: java spring spring-boot spring-mvc

认为有一个名为“ 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”。 / p>

1 个答案:

答案 0 :(得分:0)

无论您的首页是什么,处理大的long值时Javascript,JSON和Angular都有很多问题。不幸的是,您无法更改这些值的取整方式。 在任何一种情况下,我都建议使用一个转换器在检索/存储时(使用AttributeConverter之类的)将您的长值转换为String。

@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)

还有其他一些转换器,具体取决于您的实际用例。