Gson 序列化器的使用
阿新 • • 發佈:2018-11-23
業務場景:最近在做一個檔案路徑的加密,很多類設計到檔案的路徑,由於我們專案的使用的框架比較奇葩,然而很多類繼承了一個處理返回引數的父類,我就在這個父類裡面開始動刀了:
序列化這邊的工具用到的是GSON屬於谷歌:
1 import com.alibaba.fastjson.JSONObject; 2 import com.fasterxml.jackson.databind.ObjectMapper; 3 import com.google.gson.*; 4 import com.sxx.inpa.CommonEnctyptUtil; 5 6 import java.io.IOException;7 import java.lang.reflect.Type; 8 import java.util.*; 9 10 public class GosnDemo { 11 12 public static void main(String[] args) throws IOException { 13 // GsonBuilder用來生成Gson物件. 規定Gson的序列化和返序列化時的格式等內容. 14 GsonBuilder gsonBuilder = new GsonBuilder(); 15 // 這裡定義匿名內部類的序列化器,指定只針對String型別的value進行序列化這裡在序列化過程中可以對其進行你想要的業務操作16 // 當然這裡我的業務是進行AES加密 17 JsonSerializer<String> serializer = 18 new JsonSerializer<String>() { 19 @Override 20 public JsonElement serialize(String src, Type typeOfSrc, JsonSerializationContext context) { 21 String substring = "";22 // if (src.contains("/nfsc/") || src.contains("nfsc/")) { 23 String[] split = src.split("\\|"); 24 List<String> strings = Arrays.asList(split); 25 StringBuffer stringBuffer = new StringBuffer(); 26 strings.forEach(a -> { 27 // CommonEnctyptUtils是我的加密工具類 28 String aesResult = CommonEnctyptUtil.getAESResult(a, 3); 29 stringBuffer.append(aesResult).append("|"); 30 }); 31 String aesString = stringBuffer.toString(); 32 substring = aesString.substring(0, aesString.length() - 1); 33 // } 34 // 這裡返回值是JsonElement 可以建立一個JsonPrimitive類(json的元資料) 35 // 這裡 src String 型別的是json的元資料 當然JsonObject 也是屬於 json的元資料 36 // 因此可以返回 jsonObject 37 JsonPrimitive jsonPrimitive = new JsonPrimitive(substring); 38 return jsonPrimitive; 39 } 40 }; 41 // 把自定義的序列化器註冊到GsonBuilder的Gson構建類上去 42 gsonBuilder.registerTypeAdapter(String.class, serializer); 43 // 此時建立 Gson 44 Gson customGson = gsonBuilder.create(); 45 Object exResponse = ""; 46 List<Map<String, Object>> list = new ArrayList<>(); 47 Map<String, Object> map = new HashMap<>(); 48 // map.put("test", "/nfsc/|/nfsc/|/nfsc/"); 49 map.put("test", "/nfsc/"); 50 map.put("number", 1); 51 list.add(map); 52 System.out.println(list); 53 Object o = JSONObject.toJSON(list); 54 String s = o.toString(); 55 if (s.contains("/nfsc/") || s.contains("nfsc/")) { 56 // 轉換成json字串進行操作 57 String customJSON = customGson.toJson(list); 58 ObjectMapper objectMapper = new ObjectMapper(); 59 // 反序列化成物件 60 exResponse = objectMapper.readValue(customJSON, Object.class); 61 } 62 System.out.println(exResponse); 63 } 64 65 66 }
第一篇文章比較簡陋,註釋還行,我目標是做一個嚴謹的男人,有什麼好的建議,大家可以建議給我,互相交流學習,謝謝!