场景描述
在使用Long类型数据时,根据id获取对象,然后传递到前端,后端获取数据是正常的,但是传递到前端会发生精度丢失。
1). 数据表存在一条数据,以雪花算法作为主键
2). 编写Controller,接受get请求,获取该条数据
@Controller
@RequestMapping("/api/student")
public class StudentController {
@Autowired
private StudentService studentService;
/**
* 描述:根据Id 查询
*
*/
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ResponseBody
public JsonResponse getById(@PathVariable("id") Long id)throws Exception {
Student student = studentService.getById(id);
return JsonResponse.success(student);
}
}
3). 前端发送请求
浏览器访问:http://127.0.0.1:8889/api/student/1405781457820983297
4). 后端接受请求执行sql
查询结果并打印结果如下:
前端返回结果为:
发生精度丢失
发生原因
java中的long能表示的范围比js中number大,部分数值在js中存不下(变成不准确的值)。
解决方法
在丢失精度的实体的属性上,加上注解:@JsonSerialize(using= ToStringSerializer.class)
@TableId("sid")
@JsonSerialize(using= ToStringSerializer.class)
private Long sid;