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>
```