java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > @JsonSerialize(using = LongToStringUtil.class)注解

@JsonSerialize(using = LongToStringUtil.class)注解的使用方式

作者:太白神龙

这篇文章主要介绍了@JsonSerialize(using = LongToStringUtil.class)注解的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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

注意:

一定要在返回的实体类的字段上加上该注解

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文