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