文章转载地址https://my.oschina.net/u/1787735/blog/1833697
java前后端交互的过程中,定义的Long字段超过16位之后,js发生截断,从而不能跟后台数据进行匹配。
处理方法
- 把long型字段转成string进行处理。(可以使用json注解转换或者springmvc统一拦截处理)
- 修改数据库以及java实体类,数据库使用varchar,实体使用string,避免截断问题。
在大多数情况下,第一种是可取的,第二种,可行,但是可能修改起来工作量大。
本人在项目中使用了springmvc+fastjson进行统一处理,处理方法如下:
继承fastjson中的ValueFilter
public class ToStringSerializer implements ValueFilter {
[@Override](https://my.oschina.net/u/1162528)
public Object process(Object object, String name, Object value) {
if(value != null && value instanceof Long) {
if(((Long) value).longValue()>=10000000000000000L) {
value = value+"";
}
}
return value;
}
}
spring统一配置中添加
<bean id="toStringSerializer" class="com.xdja.topsec.ToStringSerializer"/>
<bean id="jsonConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
<property name="fastJsonConfig" ref="fastJsonConfig"/>
</bean>
<bean id="fastJsonConfig" class="com.alibaba.fastjson.support.config.FastJsonConfig">
<property name="serializeFilters">
<list>
<ref bean="toStringSerializer"/>
</list>
</property>
</bean>