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