Gson 序列化器的使用

2018-11-26 07:55:59来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

业务场景:最近在做一个文件路径的加密,很多类设计到文件的路径,由于我们项目的使用的框架比较奇葩,然而很多类继承了一个处理返回参数的父类,我就在这个父类里面开始动刀了:

序列化这边的工具用到的是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 }

第一篇文章比较简陋,注释还行,我目标是做一个严谨的男人,有什么好的建议,大家可以建议给我,互相交流学习,谢谢!

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:java map集合 --遍历

下一篇:MyBatis中避免注入攻击