类com.alibaba.fastjson.serializer.PropertyPreFilter源码实例Demo

下面列出了怎么用com.alibaba.fastjson.serializer.PropertyPreFilter的API类实例代码及写法,或者点击链接到github查看源代码。

@Override
protected void writeInternal(Object obj, Type type, HttpOutputMessage outputMessage)
		throws IOException, HttpMessageNotWritableException {
	Charset charset = getCharset(outputMessage.getHeaders());
	OutputStreamWriter out = new OutputStreamWriter(outputMessage.getBody(), charset);
	SerializeWriter writer = new SerializeWriter(out);
	JSONSerializer serializer = new JSONSerializer(writer, this.serializeConfig);
	serializer.config(SerializerFeature.DisableCircularReferenceDetect, true);

	RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
	if (requestAttributes instanceof ServletRequestAttributes) {
		Class<?> rootClass = filterClass(obj);
		if (rootClass != null) {
			String[] paths = ((ServletRequestAttributes) requestAttributes).getRequest()
					.getParameterValues("paths");
			if (paths != null && paths.length > 0) {
				rootClass = ClassUtils.getUserClass(rootClass);
				Map<Class<?>, PropertyPreFilter> propertyFilters = new HashMap<>();
				pathVisit(propertyFilters, Sets.newHashSet(paths), rootClass);

				for (Entry<Class<?>, PropertyPreFilter> entry : propertyFilters.entrySet()) {
					serializer.getPropertyPreFilters().add(entry.getValue());
				}
			} else {

				serializer.getPropertyFilters().add(DEFAULT_PROPERTY_FILTER);
			}
		} else {
			serializer.getPropertyFilters().add(DEFAULT_PROPERTY_FILTER);
		}
	}
	serializer.write(obj);
	writer.flush();
	out.close();
}
 
源代码2 项目: metrics   文件: FastJsonProvider.java
public String toJSONString(Object object, SerializeFilter filter, SerializerFeature[] features) {
    SerializeWriter out = new SerializeWriter();

    try {
        JSONSerializer serializer = new JSONSerializer(out, fastJsonConfig.serializeConfig);
        if (features != null) {
            for (SerializerFeature feature : features) {
                serializer.config(feature, true);
            }
        }

        if (filter != null) {
            if (filter instanceof PropertyPreFilter) {
                serializer.getPropertyPreFilters().add((PropertyPreFilter) filter);
            }

            if (filter instanceof NameFilter) {
                serializer.getNameFilters().add((NameFilter) filter);
            }

            if (filter instanceof ValueFilter) {
                serializer.getValueFilters().add((ValueFilter) filter);
            }

            if (filter instanceof PropertyFilter) {
                serializer.getPropertyFilters().add((PropertyFilter) filter);
            }

            if (filter instanceof BeforeFilter) {
                serializer.getBeforeFilters().add((BeforeFilter) filter);
            }

            if (filter instanceof AfterFilter) {
                serializer.getAfterFilters().add((AfterFilter) filter);
            }
        }

        serializer.write(object);

        return out.toString();
    } finally {
        out.close();
    }
}
 
private void pathVisit(final Map<Class<?>, PropertyPreFilter> propertyFilters, final Set<String> paths,
		Class<?> beanClass) {
	if (paths == null || beanClass == null) {
		return;
	}

	Set<String> revisePaths = new HashSet<>();
	Map<String, Set<String>> references = new HashMap<>();
	for (String path : paths) {
		if (StringUtils.contains(path, ".")) {
			String referenceProperty = StringUtils.substringBefore(path, ".");
			revisePaths.add(referenceProperty);

			Set<String> referencePaths = references.get(referenceProperty);
			if (referencePaths == null) {
				referencePaths = new HashSet<>();
				references.put(referenceProperty, referencePaths);
			}
			referencePaths.add(StringUtils.substringAfter(path, "."));
		} else {
			revisePaths.add(path);
		}
	}

	if (revisePaths.size() > 0) {
		PropertyPreFilter preFilter = propertyFilters.get(beanClass);
		if (preFilter != null) {
			if (preFilter instanceof IncludesPropertyPreFilter) {
				((IncludesPropertyPreFilter) preFilter).getIncludes().addAll(revisePaths);
			}
		} else {
			propertyFilters.put(beanClass, new IncludesPropertyPreFilter(beanClass, revisePaths));
		}

	}

	if (references.size() > 0) {
		for (Entry<String, Set<String>> reference : references.entrySet()) {
			pathVisit(propertyFilters, reference.getValue(),
					PropertyUtil.getPropertyType(beanClass, reference.getKey()));
		}
	}
}
 
 类所在包
 同包方法