spring-mvc序列化json动态擦除属性

上传人:cn****1 文档编号:456935598 上传时间:2022-07-18 格式:DOC 页数:14 大小:347KB
返回 下载 相关 举报
spring-mvc序列化json动态擦除属性_第1页
第1页 / 共14页
spring-mvc序列化json动态擦除属性_第2页
第2页 / 共14页
spring-mvc序列化json动态擦除属性_第3页
第3页 / 共14页
spring-mvc序列化json动态擦除属性_第4页
第4页 / 共14页
spring-mvc序列化json动态擦除属性_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《spring-mvc序列化json动态擦除属性》由会员分享,可在线阅读,更多相关《spring-mvc序列化json动态擦除属性(14页珍藏版)》请在金锄头文库上搜索。

1、项目结构:spring-mvc + mybaties (annotation-driven ),返回给客户端序列化的json 串 问题背景:由于项目本身性质, 后台程序返回给前台的时候,返回了一大堆没用的属性。为了节约网络流量,需要对多余的属性进行擦除,最简单的办法就是在将要序列化的对象的属性设置 为空,然后再序列化的时候排除空属性即可(当然也可以自己实现一个序列化插件,我比较懒,就用这种方法了)。由于这个业务是整个系统所公用的,所以考虑提取一个公共的方法,动态去擦除属性。问题解决方案:查阅了网上一些资料,综合对比了一下,决定在controller外面加一个 AOP代理拦截。在拦截器的Arou

2、nd方法里面对controller返回的结果进行统一的擦除。基本思路:1、 给需要序列化的对象(例如,对象A)添加一种使用场景,使用注解在这个对 象上面指定每一种场景需要保留或者需要擦除哪些属性2、每个使用到这个对象 A的方法,都需要指定这个对象的场景。3、 通用的AOP根据这个场景,来查找到想要保留、擦除的属性,然后通过给属性 设置空值进行擦除。4、场景跟要保留或者擦除的属性得映射,可以通过注解,也可以通过配置文件, 本质上是差不多的,这里采用注解。通用组件共有这些类:T出 j soin3-!阿.3.曲.-,.3-BeanEraseUtil. java T4&414-7-16 下午3 :36

3、 皿 爭 rIrasaatle. java丽下午丁玄JicnF ja.v* 7464 14-7-18 下牛(nuia*r JscnTiltrEnti ty. jivi 41414T_lu | 二 .3B managerilterEntry. j avs 747214-7-18 下牛3: 44 msn乩詐fJsnJiltrFar5jr. 7464 14_7_1S F午man翌射代码:Json Filter.java,这个类是场景和属性映射的集合packagecom . test .json ;importjava.la ng .anno tati on.ElementType;importjav

4、a.la ng .anno tati on.Retention;importjava.la ng .anno tati on.Retention Policy;importjava.la ng .anno tati on.Target ;Rete nti on(Retention Policy.RUNTIME)Target(ElementType.TYPE)publicin terface JsonF ilterpublicJsonF ilterE ntry value ();*Json FilterE ntry.java,每个场景对应一个这个注解,这个注解是场景与属性的映射packageco

5、m.test.json ;importjava.la ng.annotation.Retention;importjava.la ng.annotation.Retention Policy指示需要擦除哪些属性如果指定了 in eludes, 则以in eludes 为准女口果未指定 in eludes,指定了 excludes ,则以 excludes 为准如果都没有指定,则不擦除任何属性* author wisdom*/public in terface JsonF ilterE ntry/*Retention( RetentionPolicy. RUNTIME )* key* retur

6、n*/public Stri ng key/*()defaultbasic* 保留哪些属性* return*/publicStr ing/*in cludes()default ;* 排除哪些属性* return*/public Str ing excludesdefault ;()Eraseable.java,实现了这个接口的类才可以被擦除,否则不被擦除。这个接口返回一个type ,擦除的时候根据这个type去查找保留或者删除的属性。package com . test . json ;publicin terfaceEraseable publicStr ing getEraseType(

7、);JsonF ilterParser.java用来扫描指定的包里面的类,获取到关心的注解packagecom.test.json ;importjava.util.Arrays ;importjava.util.HashMap ;importjava.util.LinkedListJimportjava.util.List ;importjava.util.Map;importcom .test .dal . util .PackageSca npublicclassJsonF ilterParserstatic final Map String, Map String, JsonFilte

8、rEntityANNOTATION_MAP = new HashMap String , Map ();/* 预先把这些东西加载上,这个方法一般在系统启动的时候调用一次即可* param packages*/publicifListstaticsynchronizedvoid reload ( String packages!= null & packages . length 0) classes = new Lin kedListStr ing)(packages ();(p, true);if ( classesANNOTATION MAP.size () 0 & ANNOTATION

9、MAP . size() 0).clear ();for ( String s parseClass:classes)(s);en . getIncludes().addAll(Arrays .asList(entry.in cludes();en . getExcludes().addAll(Arrays .asList(entry.excludes();map.put ( key,en );* 解析* param classpath*/SuppressWarnings( rawtypes , unchecked )private static void parseClass (String

10、 classpath)if ( ANNOTATION_MAP . con tai nsKey( classpath )return ;try Class clazzThread . currentThreadif ( clazz().getC on textClassLoader!= n ull )().loadClass (classpath );JsonF ilter filters=(JsonFilter(JsonFilter . class );if (filters != null )JsonF ilterE ntry en trysMap();for ( JsonFilterEnt

11、ry entryStri ng keyJsonF ilterE ntity enclazz . getAnnotation=filters map:entrysen.setKey=en try(key );.key.value ();=new HashMap getFilters ( Stringpublic static Map String , JsonFilterEntity classpath )returnANNOTATION MAP . get ( classpath );publicstaticJsonF ilterE ntity getFilter(String classpa

12、th,Stringtype )Map m = getFilters(classpath);if(m !=null )returnm . get (type );returnn ull;public static void main (String args ) reload( new String com.test.bean.ext);JsonF ilterE ntity.java,一个数据结构,用于缓存Json FilterE ntry的值packagecom.test.json ;importjava.util.HashSet ;importjava.util.Set ;publicclassJsonF ilterE ntityprivateString keyJprivateSet in cludes=new HashSet();privateSet excludes=new HashSetStri n

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号