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>
	```
相关文章
相关标签/搜索