long超過16位之後瀏覽器自動截斷問題處理。

java前後端交互的過程中,定義的Long字段超過16位之後,js發生截斷,從而不能跟後臺數據進行匹配。

處理方法

  1. 把long型字段轉成string進行處理。(可以使用json註解轉換或者springmvc統一攔截處理)
  2. 修改數據庫以及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>
	```
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章