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

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

ID:40499675

大小:33.51 KB

页数:12页

时间:2019-08-03

spring-mvc序列化json动态擦除属性_第1页
spring-mvc序列化json动态擦除属性_第2页
spring-mvc序列化json动态擦除属性_第3页
spring-mvc序列化json动态擦除属性_第4页
spring-mvc序列化json动态擦除属性_第5页
资源描述:

《spring-mvc序列化json动态擦除属性》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

2、外面加一个AOP代理拦截。在拦截器的@Around方法里面对controller返回的结果进行统一的擦除。基本思路:1、给需要序列化的对象(例如,对象A)添加一种使用场景,使用注解在这个对象上面指定每一种场景需要保留或者需要擦除哪些属性2、每个使用到这个对象A的方法,都需要指定这个对象的场景。3、通用的AOP根据这个场景,来查找到想要保留、擦除的属性,然后通过给属性设置空值进行擦除。4、场景跟要保留或者擦除的属性得映射,可以通过注解,也可以通过配置文件,本质上是差不多的,这里采用注解。通用组件共有这些类:代码:JsonFilter.

3、java,这个类是场景和属性映射的集合packagecom.test.json;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public@interface

4、JsonFilter{publicJsonFilterEntry[]value();}JsonFilterEntry.java,每个场景对应一个这个注解,这个注解是场景与属性的映射packagecom.test.json;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;/***指示需要擦除哪些属性**如果指定了includes,则以includes为准*如果未指定includes,指定了excludes,则以exclude

5、s为准*如果都没有指定,则不擦除任何属性**@authorwisdom**/@Retention(RetentionPolicy.RUNTIME)public@interfaceJsonFilterEntry{/***key*@return*/publicStringkey()default"basic";/***保留哪些属性*@return*/publicString[]includes()default{};/***排除哪些属性*@return*/publicString[]excludes()default{};}Erasea

6、ble.java,实现了这个接口的类才可以被擦除,否则不被擦除。这个接口返回一个type,擦除的时候根据这个type去查找保留或者删除的属性。packagecom.test.json;publicinterfaceEraseable{publicStringgetEraseType();}JsonFilterParser.java,用来扫描指定的包里面的类,获取到关心的注解packagecom.test.json;importjava.util.Arrays;importjava.util.HashMap;importjava.ut

7、il.LinkedList;importjava.util.List;importjava.util.Map;importcom.test.dal.util.PackageScan;publicclassJsonFilterParser{privatestaticfinalMap>ANNOTATION_MAP=newHashMap>();/***预先把这些东西加载上,这个方法一般在系统启动的

8、时候调用一次即可*@parampackages*/publicstaticsynchronizedvoidreload(String[]packages){if(packages!=null&&packages.length>0){L

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。