您的位置:首页 > Web前端 > JavaScript

關於 fastjson 中的 SimplePropertyPreFilter

2012-12-17 18:41 225 查看
版本:fastjson-1.1.26

SimplePropertyPreFilter源碼:

package com.alibaba.fastjson.serializer;

import java.util.HashSet;
import java.util.Set;

public class SimplePropertyPreFilter implements PropertyPreFilter {

private final Class<?>    clazz;
private final Set<String> includes = new HashSet<String>();
private final Set<String> excludes = new HashSet<String>();

public SimplePropertyPreFilter(String... properties){
this(null, properties);
}

public SimplePropertyPreFilter(Class<?> clazz, String... properties){
super();
this.clazz = clazz;
for (String item : properties) {
if (item != null) {
this.includes.add(item);
}
}
}

public Class<?> getClazz() {
return clazz;
}

public Set<String> getIncludes() {
return includes;
}

public Set<String> getExcludes() {
return excludes;
}

public boolean apply(JSONSerializer serializer, Object source, String name) {
if (source == null) {
return true;
}

if (clazz != null && !clazz.isInstance(source)) {
return true;
}

if (this.excludes.contains(name)) {
return false;
}

if (includes.size() == 0 || includes.contains(name)) {
return true;
}

return false;
}

}


可知 includes 和 excludes 都為 final 所以不可修改
於是得動手修改,我另外寫了個類:

public class SimplePropertyPreFilter implements PropertyPreFilter {

private final Class<?>    clazz;
private Set<String> includes = new HashSet<String>();
private Set<String> excludes = new HashSet<String>();

public SimplePropertyPreFilter(String... properties){
this(null, properties);
}

public SimplePropertyPreFilter(Class<?> clazz, String... properties){
super();
this.clazz = clazz;
for (String item : properties) {
if (item != null) {
this.includes.add(item);
}
}
}

public Class<?> getClazz() {
return clazz;
}

public boolean apply(JSONSerializer serializer, Object source, String name) {
if (source == null) {
return true;
}

if (clazz != null && !clazz.isInstance(source)) {
return true;
}

if (this.excludes.contains(name)) {
return false;
}

if (includes.size() == 0 || includes.contains(name)) {
return true;
}

return false;
}

public Set<String> getIncludes() {
return includes;
}

public Set<String> getExcludes() {
return excludes;
}

public void setIncludes(Set<String> includes) {
this.includes = includes;
}

public void setExcludes(Set<String> excludes) {
this.excludes = excludes;
}

}


簡單做了個測試:

public static String bean(Object object){
Set<String> excludes = new HashSet<String>();
excludes.add("name");
SimplePropertyPreFilter spp = new SimplePropertyPreFilter();
spp.setExcludes(excludes);
return JSON.toJSONString(object,spp);
}


OK!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: