@jsonserialize(using = longtostringutil.class)注解
一般我们在定义private long id;时,会添加上@jsonserialize(using = longtostringutil.class)这样类似的注解,接下来我们来看一下这个注解是什么意思?有什么作用?
使用注解
如下所示:
@jsonserialize(using = longtostringutil.class) private long id;
@jsonserialize在com.fasterxml.jackson.databind.annotation路径下,是fastjson包下的接口。
我们实体类中定义的long类型的数据在和前端交互时
会比number数值更大,会导致精度缺失,使用jsonserialize注解,可以帮助我们解决该问题。
在using = longtostringutil.class
可以使用我们自定义的类,来将我们传入的值转换为string类型,来传入到前端,可以解决精度问题
定义的longtostringutil类需要继承自jsonserializer<long>类
代码如下所示:
//在实体类的long类型属性上加上注解:@jsonserialize(using =longtostringserializer.class) //long类型数据(eg:id)传到前台会超出js精确整形范围,因此转化为string传到前台 public class longtostringutil extends jsonserializer<long> { @override public void serialize(long value, jsongenerator gen, serializerprovider serializers) throws ioexception { if(null!=value) { gen.writestring(string.valueof(value)); } } }
@jsonserialize(using = tostringserializer.class)用法及注意事项
该注解的作用
把指定的类型转化string类型返给前端
为什么使用该注解
如果long值超过前端js显示的长度范围时会导致前端回显错误
此时我们想到的解决方案是将long值返回给前端时转为string,
但是我们又不想变更字段的类型,当然我们也不想额外添加新的字段。
这个时候我们可以用@jsonserialize,在json序列化的时候把long自动转为string
示例
/** * 主键 */ import com.fasterxml.jackson.databind.annotation.jsonserialize; import com.fasterxml.jackson.databind.ser.std.tostringserializer; @tableid @jsonserialize(using = tostringserializer.class) private long id;
注意:
一定要在返回的实体类的字段上加上该注解
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论