FastJson前置属性过滤器

 /**
* <html>
* <body>
* <P> Copyright 1994 JsonInternational</p>
* <p> All rights reserved.</p>
* <p> Created on 19941115</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.alpaca.framework.utils.properties; import java.util.HashMap;
import java.util.Map; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.PropertyPreFilter;
import com.alibaba.fastjson.serializer.SerializerFeature; /**
* @Package:cn.ucaner.common.utils
* @ClassName:ComplexPropertyPreUtils
* @Description: <p> 前置属性过滤器</p>
* @Author: - Jason
* @CreatTime:2017年10月24日 上午10:49:03
* @Modify By:
* @ModifyTime:
* @Modify marker:
* @version V1.0
*/
public class ComplexPropertyPreUtils implements PropertyPreFilter { private Map<Class<?>, String[]> includes = new HashMap<>();
private Map<Class<?>, String[]> excludes = new HashMap<>(); static {
JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();
} public ComplexPropertyPreUtils() { } public ComplexPropertyPreUtils(Map<Class<?>, String[]> includes) {
super();
this.includes = includes;
} public boolean apply(JSONSerializer serializer, Object source, String name) { //对象为空。直接放行
if (source == null) {
return true;
} // 获取当前需要序列化的对象的类对象
Class<?> clazz = source.getClass(); // 无需序列的对象、寻找需要过滤的对象,可以提高查找层级
// 找到不需要的序列化的类型
for (Map.Entry<Class<?>, String[]> item : this.excludes.entrySet()) {
// isAssignableFrom(),用来判断类型间是否有继承关系
if (item.getKey().isAssignableFrom(clazz)) {
String[] strs = item.getValue(); // 该类型下 此 name 值无需序列化
if (isHave(strs, name)) {
return true;
} else {
return false;
}
}
} // 需要序列的对象集合为空 表示 全部需要序列化
if (this.includes.isEmpty()) {
return true;
} // 需要序列的对象
// 找到不需要的序列化的类型
for (Map.Entry<Class<?>, String[]> item : this.includes.entrySet()) {
// isAssignableFrom(),用来判断类型间是否有继承关系
if (item.getKey().isAssignableFrom(clazz)) {
String[] strs = item.getValue();
// 该类型下 此 name 值无需序列化
if (isHave(strs, name)) {
return true;
}
}
} return false;
} /*
* 此方法有两个参数,第一个是要查找的字符串数组,第二个是要查找的字符或字符串
*/
public static boolean isHave(String[] strs, String s) { for (int i = 0; i < strs.length; i++) {
// 循环查找字符串数组中的每个字符串中是否包含所有查找的内容
if (strs[i].equals(s)) {
// 查找到了就返回真,不在继续查询
return true;
}
} // 没找到返回false
return false;
} public Map<Class<?>, String[]> getIncludes() {
return includes;
} public void setIncludes(Map<Class<?>, String[]> includes) {
this.includes = includes;
} public Map<Class<?>, String[]> getExcludes() {
return excludes;
} public void setExcludes(Map<Class<?>, String[]> excludes) {
this.excludes = excludes;
} }

FastJson前置属性过滤器的更多相关文章

  1. fastjson格式化bean的简易属性过滤器

    fastjson的bean属性过滤器 有的时候,我们在接口开发时,一个完整的bean会包含很多属性,但是前端接口只需要其中的某几个属性时,应该在对json的返回要进行精简.下面直接看代码 packag ...

  2. grootJs 属性过滤器

    index10.html <html><head> <title>属性过滤器</title> <script src="jquery-1 ...

  3. HCNP Routing&Switching之BGP团体属性和团体属性过滤器

    前文我们了解了BGP的路由过滤已经as-path过滤器的使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15542559.html:今天我们来聊一聊 ...

  4. @JsonInclude注解,RestTemplate传输值为null的属性,利用FastJson将属性中有空值null的对象转化成Json字符串

    一个pojo类: import lombok.Data; @Data public class Friend { private String name; private int age; priva ...

  5. Jsonlib 属性过滤器

    /** * @title JSON转换属性过滤器 * @description 用于JSON lib的JSON转换 * @author maohuidong * @date 2017-04-06 */ ...

  6. fastjson的值过滤器ValueFilter

    https://blog.csdn.net/linyifan_/article/details/83060408 原创林天乐 发布于2018-10-15 16:20:25 阅读数 1462  收藏 展 ...

  7. fastJson + lombok + 属性名命名 踩坑点

    JavaBean属性名要求:前两个字母要么都大写,要么都小写 package com.jdyh.worker.project.controller; import com.alibaba.fastjs ...

  8. jquery属性过滤器

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  9. jQuery表单对象属性过滤器再探究(原创)

    上面例子的总结: 1.”+n+”千万不要把前面或者后面的+漏掉了.否则不会出现正确结果 2.$(“:checkbox”).click(countChecked)注意写法,不是click(functio ...

随机推荐

  1. Linux环境下安装Redis

    记录一下Linux环境下安装Redis,按顺序执行即可,这里下载的是Redis5,大家可根据自己的需求,修改版本号就好了,亲测可行. 1.下载Redis安装包cd /usr/local/wget ht ...

  2. 浅谈UDF并行

    首先我们来看说明UDF并行流程的这个图 网格和求解数据分布和储存在计算节点(compute-node)处理器上,而对于GUI界面和主机(host)节点上不存储任何数据,主机节点将命令从GUI传递到0节 ...

  3. jmeter-可视化的非GUI模式

    概述 我们在使用JMeter执行性能测试的过程中,会遇到很多不方便的地方 GUI模式 执行脚本很方便,看结果也很方便,但是GUI模式消耗资源,对测试结果的准确性影响很大 非GUI模式 消耗资源很少,但 ...

  4. 分布式系统 与 Google

    google 论文 http://duanple.com/?p=170 google 论文与开源 http://duanple.com/?p=1096 分布式系统论文集 https://github. ...

  5. Cesium 1.54评测 【转】

    重要功能评测 3dtiles数据上画线和贴纹理   3dtiles数据上画线和贴纹理 把线条贴到3dtiles上需要用到两个属性:clampToGround和classificationType. c ...

  6. 使用kafka-python客户端进行kafka kerberos认证

    之前说过python confluent kafka客户端做kerberos认证的过程,如果使用kafka python客户端的话同样也可以进行kerberos的认证,具体的认证机制这里不再描述,主要 ...

  7. RSA加密公钥系数获取结果多00

    写在前面 本文是在解决加密和解密用的不是同一套密钥对时找到的一篇, 最后问题不在byte数组, 是自己工具类中生成密钥对的问题, 但是本文RSA加密中公钥指数和公钥系数的获取(byte[]部分)讲解比 ...

  8. 自己写的一个 CGBLIB 动态代理【原创】

    CGLIB代理类,用CGLIB来实现一个代理类.大致原理描述如下: 1.使用Enhancer类来生成一个继续于被代理类的子类,此子类会重写被代理类(父类)中所有的非final的public方法: 2. ...

  9. flutter 高德地图选择位置信息返回

    添加依赖:(注意,作者一直更新维护,请以最新的版本添加) amap_map_fluttify: ^ amap_search_fluttify: ^ 代码实现: import 'package:amap ...

  10. 向net core 3.0进击——多平台项目发布与部署

    前言 在经历过好多折腾后,总算是把部署走通了一遍,之前只是简单创建个工程在linux下部署,后来一直将这件事搁置,直到最近刚好团队入手一个小服务器,很显然是linux的,那就没啥说的了,Come On ...