oracle long转为string,实现全局拦截前端传入的Long类型id转String
1遇到的問題
在開發(fā)過程中存在這樣一種問題,我們使用的id主鍵主要有l(wèi)ong類型和varchar類型
當(dāng)主鍵id為long類型并且長度超過16位,當(dāng)返回給前端時,前端會出現(xiàn)js解析的參數(shù)如果是Long類型的并且長度過大就會出現(xiàn)精度丟失。這就會造成后臺返回的值與前端拿到的不一致問題。
2解決思路
根據(jù)加固項(xiàng)目采用Spring+springMVC+mango的架構(gòu)設(shè)計前后端參數(shù)傳遞都有統(tǒng)一出入口,
根據(jù)FastJsonHttpMessageConverter實(shí)現(xiàn)了HttpMessageConverter對于后臺返回的Java對象解析為outStream后返回給前端,在配置中實(shí)現(xiàn)攔截。
在 SpringMVC進(jìn)入readString方法前會根據(jù)@requestBody選擇HttpMessageConverter,http請求是基于文 本的瀏覽器和服務(wù)器通過交換原始文件進(jìn)行通信這就意味著需要將我們的Java對象序列化和反序列化,及將Java對象解析到String變量中,當(dāng)執(zhí)行 readString方法時綁定string參數(shù)輸出響應(yīng)報文。
(響應(yīng)時)springmvc-----java對象------HttpMessageConverter----outStream----響應(yīng)報文
3實(shí)例說明
加固項(xiàng)目applicationContext-http.xml部分配置
application/json;charset=UTF-8
text/plain;charset=UTF-8
在Java對象轉(zhuǎn)為json對象時會被FastJsonHttpMessageConverter這個處理類攔截,攔截時會觸發(fā)自己配置的toStringSerializer處理類,該類中可以自定義所需要處理返回給前端的數(shù)據(jù)。
public class ToStringSerializer implements ValueFilter {
@Override
public Object process(Object object, String name, Object value) {
if(value != null && value instanceof Long) {
if(((Long) value).longValue()>=10000000000000000L) {
value = value+"";
}
}
return value;
}
}
自定義類ToStringSerializer 實(shí)現(xiàn)了ValueFilter 繼承了SerializeFilter接口重寫了process方法
該方法有三個參數(shù):json對象,對象key,對象value當(dāng)key對應(yīng)的值為long類型且長度超過十六位此時統(tǒng)一在處理類中將該值轉(zhuǎn)為字符串類型然后返回給前端。
總結(jié)
以上是生活随笔為你收集整理的oracle long转为string,实现全局拦截前端传入的Long类型id转String的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 该证券账号未指定是什么意思?
- 下一篇: HTML语言name,HTML a 标签