/**
* @title JSON转换属性过滤器
* @description 用于JSON lib的JSON转换
* @author maohuidong
* @date 2017-04-06
*/
public class JsonConvertPropertyFilter implements PropertyFilter {
/**
* @function apply
* @param obj:待转换的对象 s: 对象的属性 value:对象的属性值
* @description JSON转换属性过滤器(Hibernate)
* @return true:过滤 false:不过滤
* @author maohuidong
* @date 2017-04-06
*/
@Override
public boolean apply(Object obj, String s, Object value) {
// hibernate代理对象未初始化,则过滤掉
if (value instanceof HibernateProxy) {
LazyInitializer initializer = ((HibernateProxy) value)
.getHibernateLazyInitializer();
if (initializer.isUninitialized()) {
return true;
}
}
// Hibernate持久化集合为初始化,则过滤掉(实体关联一对多)
if (value instanceof PersistentCollection) {
PersistentCollection collection = (PersistentCollection) value;
if (!collection.wasInitialized()) {
return true;
}
}
return false;
}
}

/**
* @function objStreamOutput
* @param 无
* @description 输出流封装
* @return 无
* @author maohuidong
* @date 2017-04-09
*/
protected void objStreamOutput(Object object,List<String> fieldFilter) throws IOException{
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
PrintWriter pWriter = response.getWriter();
//Json过滤
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setIgnoreDefaultExcludes(false);
if(fieldFilter == null){
fieldFilter = new ArrayList<String>();
}
//Json转换过滤没用的字段
fieldFilter.add("hibernateLazyInitializer");
String[] filter = new String[fieldFilter.size()];
filter = fieldFilter.toArray(filter);
jsonConfig.setExcludes(filter);
//Json转换过滤未初始化的数据
jsonConfig.setJsonPropertyFilter(new JsonConvertPropertyFilter());
//结果转换为json字符串
String str = "";
//结果集能实例化为List
if(object instanceof List){
JSONArray jsonArray = JSONArray.fromObject(object, jsonConfig);
str = jsonArray.toString();
}else if(object instanceof String){
str = (String) object;
}else if(object instanceof Number){
str = object.toString();
}
else{
JSONObject jsonObject = JSONObject.fromObject(object, jsonConfig);
str = jsonObject.toString();
}
pWriter.print(str);
pWriter.flush();
pWriter.close();
}

Jsonlib 属性过滤器的更多相关文章

  1. grootJs 属性过滤器

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

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

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

  3. FastJson前置属性过滤器

    FastJson前置属性过滤器 /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p ...

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

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

  5. jquery属性过滤器

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

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

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

  7. 前端MVC Vue2学习总结(三)——模板语法、过滤器、计算属性、观察者、Class 与 Style 绑定

    Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...

  8. 第一章 JacksonUtil 序列化与反序列化属性总结

    1.json-lib与Jackson 关于json-lib与Jackson对比总结如下: 1).性能方面,Jackson的处理能力高出Json-lib10倍左右. 2).json-lib已经停止更新, ...

  9. Jquery最全过滤器总结

    不管什么时候,总是有这么些时候:当我们使用jQuery的各种过滤器时,总是有那么几个记不牢,还要搜索一下或者翻翻手册!多少次想总结一下,最终都没总结,现在网上找到一篇总结的不错的,但是排版有点乱,本人 ...

随机推荐

  1. 监督学习(Supervised learning)

    定义符号 m:训练样本的数目 n:特征的数量 x‘s:输入变/特征值 y‘s:输出变量/目标变量 (x,y):训练样本 ->(x(i),y(i)):训练集,第i个训练样本,i=1,2..,m 监 ...

  2. 【selenium】XPATH语法(一)

    XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. 我们将在下面的例子中使用这个 XML 文档. <?xml v ...

  3. Android 对话框(Dialog)大全

    转自: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html Activities提供了一种方便管理的创建.保存.回复的对话框机制, ...

  4. SpringCloud统一配置之使用配置

    配置的读取方式在上一篇文章中有提到. 取到值之后赋值给静态类里的静态变量. 因为SpringCloud项目启动的时候会把所有的api都执行一遍(相当蛋疼),所以这里直接就可以写一个方法进行赋值. 代码 ...

  5. session 、cookie、token的区别

    session session的中文翻译是“会话”,当用户打开某个web应用时,便与web服务器产生一次session.服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后sess ...

  6. POJ 3666 Making the Grade (线性dp,离散化)

    Making the Grade Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) T ...

  7. Find minimum continuous subsequence tags

    Given targetList, a list of strings representing the desired tags, and availableTagList, a list of s ...

  8. numpy里的randn

    这个函数的作用就是从标准正态分布中返回一个或多个样本值.什么是标准正态分布 来源:http://www.360doc.com/content/17/0306/13/32342759_634411464 ...

  9. 1043 Is It a Binary Search Tree (25 分)

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

  10. 一个PHPer的规划

    前言:学PHP过时了吗?PHP开发人员如何快速成长?怎么进行职业规划?特别是近几年非常火热的人工智能,机器学习,区块链技术等等,这多少会带动一些人盲目跟风,迷茫等,下面是PHP大牛魏永强带来的一篇根据 ...