1. 程式人生 > >fastjson 多級聯屬性過濾

fastjson 多級聯屬性過濾

  1 package com.example.util.fastjson;
  2       
  3 import java.util.Date;
  4 import java.util.HashMap;
  5 import java.util.Map;
  6       
  7 import com.alibaba.fastjson.JSON;
  8 import com.alibaba.fastjson.serializer.JSONSerializer;
  9 import com.alibaba.fastjson.serializer.PropertyPreFilter;
10 import com.alibaba.fastjson.serializer.SerializerFeature; 11 import com.suncompass.example.auth.entity.AuthEmployee; 12 import com.suncompass.example.auth.entity.AuthMenu; 13 import com.suncompass.framework.base.entity.BaseEntity; 14 15 /** 16 * @author :晨風²º¹³ <br> 17 * @Comment : fastjson 針對型別的屬性選擇過濾器(可以跨層級) <br>
18 */ 19 public class ComplexPropertyPreFilter implements PropertyPreFilter { 20 21 private Map<Class<?>, String[]> includes = new HashMap<>(); 22 private Map<Class<?>, String[]> excludes = new HashMap<>(); 23 24 static
{ 25 JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask(); 26 } 27 28 public ComplexPropertyPreFilter() { 29 30 } 31 32 public ComplexPropertyPreFilter(Map<Class<?>, String[]> includes) { 33 super(); 34 this.includes = includes; 35 } 36 37 public boolean apply(JSONSerializer serializer, Object source, String name) { 38 39 //物件為空。直接放行 40 if (source == null) { 41 return true; 42 } 43 44 // 獲取當前需要序列化的物件的類物件 45 Class<?> clazz = source.getClass(); 46 47 // 無需序列的物件、尋找需要過濾的物件,可以提高查詢層級 48 // 找到不需要的序列化的型別 49 for (Map.Entry<Class<?>, String[]> item : this.excludes.entrySet()) { 50 // isAssignableFrom(),用來判斷型別間是否有繼承關係 51 if (item.getKey().isAssignableFrom(clazz)) { 52 String[] strs = item.getValue(); 53 54 // 該型別下 此 name 值無需序列化 55 if (isHave(strs, name)) { 56 return false; 57 } 58 } 59 } 60 61 // 需要序列的物件集合為空 表示 全部需要序列化 62 if (this.includes.isEmpty()) { 63 return true; 64 } 65 66 // 需要序列的物件 67 // 找到不需要的序列化的型別 68 for (Map.Entry<Class<?>, String[]> item : this.includes.entrySet()) { 69 // isAssignableFrom(),用來判斷型別間是否有繼承關係 70 if (item.getKey().isAssignableFrom(clazz)) { 71 String[] strs = item.getValue(); 72 // 該型別下 此 name 值無需序列化 73 if (isHave(strs, name)) { 74 return true; 75 } 76 } 77 } 78 79 return false; 80 } 81 82 /* 83 * 此方法有兩個引數,第一個是要查詢的字串陣列,第二個是要查詢的字元或字串 84 */ 85 public static boolean isHave(String[] strs, String s) { 86 87 for (int i = 0; i < strs.length; i++) { 88 // 迴圈查詢字串陣列中的每個字串中是否包含所有查詢的內容 89 if (strs[i].equals(s)) { 90 // 查詢到了就返回真,不在繼續查詢 91 return true; 92 } 93 } 94 95 // 沒找到返回false 96 return false; 97 } 98 99 public Map<Class<?>, String[]> getIncludes() { 100 return includes; 101 } 102 103 public void setIncludes(Map<Class<?>, String[]> includes) { 104 this.includes = includes; 105 } 106 107 public Map<Class<?>, String[]> getExcludes() { 108 return excludes; 109 } 110 111 public void setExcludes(Map<Class<?>, String[]> excludes) { 112 this.excludes = excludes; 113 } 114 115 public static void main(String[] args) { 116 // use instanceOf,用來判斷物件是否是類的例項 117 // use isAssignableFrom(),用來判斷型別間是否有繼承關係 118 // use isInstance(),用來判斷物件是否是類的例項 119 120 Class<?> intClass = Integer.class; 121 122 // Create various objects. 123 String str = "Hello"; 124 Date date = new Date(); 125 Integer i = new Integer(10); 126 127 // Is str an instance of class Integer? 128 boolean check1 = intClass.isInstance(str); 129 System.out.println("str is an Integer? " + check1); 130 131 // Is date an instance of class Integer? 132 boolean check2 = intClass.isInstance(date); 133 System.out.println("date is an Integer? " + check2); 134 135 // Is i an instance of class Integer? 136 boolean check3 = intClass.isInstance(i); 137 System.out.println("i is an Integer? " + check3); 138 139 System.out.println(BaseEntity.class.isInstance(new AuthEmployee())); 140 System.out.println(AuthEmployee.class.isInstance(new AuthMenu())); 141 142 System.out.println(BaseEntity.class.isAssignableFrom(AuthEmployee.class)); 143 } 144 }

相關推薦

fastjson 多級屬性過濾

1 package com.example.util.fastjson; 2 3 import java.util.Date; 4 import java.util.HashMap; 5 import java.util.Map; 6 7

jquery過濾選擇器-----------(表單對象屬性過濾選擇器 與 表單選擇器)

images alt 分享 wid image logs jquery query 器) 1.表單對象屬性選擇器    2.程序 3.表單選擇器    jquery過濾選擇器-----------(表單對象屬性過濾選擇器 與 表單選擇器)

Hibernate多對多級操作

save 秘書 標簽 role user 回顧 總經理 進行 oid   表與表之間關系回顧(重點) 2 多對多 (1)訂單和商品關系,一個訂單裏面有多個商品,一個商品屬於多個訂單 (2)用戶和角色多對多關系 - 用戶: 小王、小馬、小宋 - 角色:總經理、秘書、司機、

mybatis多對多級查詢

查詢 sts clas common start 分頁 pac res put 1.實體 package com.govmade.govdata.modules.sys.pojo; import java.util.List; import javax.persi

springMVC---級屬性

res tostring () charset odin ext mage this highlight 承接一二章 結構 index.jsp <%@ page language="java" contentType="text/html; charse

jQuery 基本選擇器 層次選擇器 過濾選擇器 內容過濾選擇器 可見過濾選擇器 屬性過濾選擇器 表單對象屬性過濾選擇器

層次選擇器 分享圖片 分享 技術 info 對象 inf jquery 內容 jQuery 基本選擇器 層次選擇器 過濾選擇器 內容過濾選擇器 可見過濾選擇器 屬性過濾選擇器 表單對象屬性過濾選擇器

hibernate的的一對多級關係

1、什麼是關聯(association) 1.1 關聯指的是類之間的引用關係。如果類A與類B關聯,那麼被引用的類B將被定義為類A的屬性。例如: public class A{ private B b = new B; public A(){} } 1.2 關聯的分類:關聯可以分為一對一、一對

Mybatis3.1-[tp-30-31]-select_resultMap_關聯查詢_級屬性封裝結果__association定義關聯物件封裝規則

筆記要點 出錯分析與總結 在全域性配置中,對映dao包下的全部: <mapper> <package name="com.dao"/> </mappers> 工程組織   1.定義介面 package co

hibernate多對多級查詢、新增、刪除

以書籍與書籍類別為例: 一本書可以有多種型別,一種型別也可以對應多本書,書籍和書籍類別的關係是多對多的關係,他們的關係是在中間表裡面的。   多對多通過一個表找到另一個表的資料的條件為: 中間表 中間表對應本表的外來鍵 中間表對應關聯表的外來鍵 注:多對多的時候

12. jQuery-表單物件屬性過濾選擇器

<!DOCTYPE html> <html> <head> <title>jQuery表單物件屬性過濾選擇器</title> <style type="text/css">

10. jQuery-屬性過濾選擇器

<!DOCTYPE html> <html> <head> <title>屬性過濾選擇器</title> <style type="text/css"> body{font-

arcgis api for js 屬性過濾顯示

var querysql=sqlTxt.val(); //圖層過濾 lyr.layer.setDefinitionExpression();   //屬性表顯示 var query = new esri.tasks.Query(); query.returnGeom

MyBatis一對一、一對多、多對多級查詢

0.準備工作: 建立Mysql表 1.引入maven依賴:其中包括mybatis本身和逆向工程生成依賴 <dependencies> <dependency> <groupId>junit</groupId>

hibernate的多對多級查詢

資料庫的多對多 1.1 資料庫中不能直接對映多對多 處理:建立一個橋接表(中間表),將一個多對多關係轉換成兩個一對多 注2:交叉連線 注3:外連線:left(左)/right(右)/full(左右) 主從表:連線條件不成立時,主表記錄永遠保留,與null匹配

dbUtil 級屬性結果集封裝問題

現有兩個表Book (圖書),Category(分類) public Book findByBid(String bid) { try { String sql="select * from book where bid=?"; //return qr.query(sq

注入null屬性值與級屬性

一:注入null值 1.可以使用專用的<null>元素標籤為bean的字串或其他物件型別的屬性注入null值。 <!-- 測試NUll值 --> <constructor-arg><null/></constructor-arg>

jquery-可見性和屬性過濾選擇器

可見性過濾選擇器是根據元素的可見和不可見狀態來選擇相應的元素。 在可見性選擇器中,需要注意選擇器:hidden,它不僅包括樣式屬性display為“none”的元素,也包括文字隱藏域(<input type="hidden"/>)和Visibility:hidd

關於fastjson對空屬性不進行序列化

      今天,在和移動端對接的過程中,發現gson對空字串,存在序列化到物件存在異常的問題,這個問題我們想從給物件設定預設值,這個我覺得對程式的侵入太深,況且容易因為疏忽,導致不全,然後採用一種統一的方式來解決,這樣就可以從上層解決問題,最終我們決定採用空屬性不進行序列化

Hibernate4 註解配置實現一對多級刪除

用了hibernate有一段時間了,不過總是寫很簡單的功能,今天看了一下hibernate的級聯刪除,發現網上有很多程式碼已經過時了,即使沒有過時的也有許多坑沒有說明,在踩了n個坑後終於實現了hibernate的級聯刪除。 我們以產品型別ProductType類和產品Pro

ol3中妙用Arcgis Server Rest Export介面模擬WMS,並實現屬性過濾

概述 在本文,講述如何妙用Arcgis Server的REST Export介面實現WMS服務的呼叫和圖層的屬性過濾。 參考 1、巧用Arcgis Server的REST介面實現OL2中WMS新增過濾 2、OGC——WMS詳細介紹(arcgis server舉例) 參