import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Set;
import net.sf.json.util.PropertyFilter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* <p>Title: 忽略属性</p>
* <p>Description:忽略JAVABEAN的指定属性、是否忽略集合类属性</p>
*
*/
public class IgnoreFieldProcessorImpl implements PropertyFilter {
Log log = LogFactory.getLog(this.getClass());
/**
* 忽略的属性名称
*/
private String[] fields;
/**
* 是否忽略集合
*/
private boolean ignoreColl = false;
/**
* 空参构造方法<br/>
* 默认不忽略集合
*/
public IgnoreFieldProcessorImpl() {
// empty
}
/**
* 构造方法
* @param fields 忽略属性名称数组
*/
public IgnoreFieldProcessorImpl(String[] fields) {
this.fields = fields;
}
/**
* 构造方法
* @param ignoreColl 是否忽略集合
* @param fields 忽略属性名称数组
*/
public IgnoreFieldProcessorImpl(boolean ignoreColl, String[] fields) {
this.fields = fields;
this.ignoreColl = ignoreColl;
}
/**
* 构造方法
* @param ignoreColl 是否忽略集合
*/
public IgnoreFieldProcessorImpl(boolean ignoreColl) {
this.ignoreColl = ignoreColl;
}
public boolean apply(Object source, String name, Object value) {
Field declaredField = null;
//忽略值为null的属性
if(value == null)
return true;
//剔除自定义属性,获取属性声明类型
if(!"data".equals(name) && "data"!=name && !"totalSize".equals(name) && "totalSize"!=name ){
try {
declaredField = source.getClass().getDeclaredField(name);
} catch (NoSuchFieldException e) {
log.equals("没有找到属性" + name);
e.printStackTrace();
}
}
// 忽略集合
if (declaredField != null) {
if(ignoreColl) {
if(declaredField.getType() == Collection.class
|| declaredField.getType() == Set.class) {
return true;
}
}
}
// 忽略设定的属性
if(fields != null && fields.length > 0) {
if(juge(fields,name)) {
return true;
} else {
return false;
}
}
return false;
}
/**
* 过滤忽略的属性
* @param s
* @param s2
* @return
*/
public boolean juge(String[] s,String s2){
boolean b = false;
for(String sl : s){
if(s2.equals(sl)){
b=true;
}
}
return b;
}
public String[] getFields() {
return fields;
}
/**
* 设置忽略的属性
* @param fields
*/
public void setFields(String[] fields) {
this.fields = fields;
}
public boolean isIgnoreColl() {
return ignoreColl;
}
/**
* 设置是否忽略集合类
* @param ignoreColl
*/
public void setIgnoreColl(boolean ignoreColl) {
this.ignoreColl = ignoreColl;
}
}
JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true)); // 忽略掉集合对象
People people= session.get(People.class, 20);
JSONObject fromObject = JSONObject.fromObject(person, config );
response.getWriter().print(fromObject.toString());
JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true, new String[]{"name"})); // 忽略掉name属性及集合对象
People people= session.get(People.class, 20);
JSONObject fromObject = JSONObject.fromObject(person, config );
response.getWriter().print(fromObject.toString());
分享到:
相关推荐
6. **过滤和转换**:可以使用`JSONObject.transform()`和`JSONArray.transform()`方法对JSON对象进行转换,例如,过滤或修改某些属性值。 7. **错误处理**:在进行JSON操作时,需要注意可能出现的异常,如`...
JSON-lib 提供了 `PropertyFilter` 接口,可以用来控制哪些 JavaBean 属性会被包含在 JSON 或 XML 中。这可以通过 `JsonConfig` 配置实现。另外,`JSONSerializer` 的 `prettyPrint()` 方法可以用于生成格式化的 ...
- 对于一个Java对象,例如一个User类的实例,首先需要确保该类的属性都有对应的getter和setter方法,这是json-lib能正确序列化和反序列化的前提。 - 转换时,可以先创建一个`JSONObject`,然后使用`JSONObject....
大家都知道jsonlib2.4之后有了属性过滤的功能,就是当把一个bean转成json的时候能指定哪些属性输出哪些不输出,不过代码很难看,如下 JsonConfig config = new JsonConfig(); config.setJsonPropertyFilter(new ...
3. **commons-beanutils-1.8.3.jar**:Apache Commons BeanUtils库简化了JavaBean对象的属性访问,它能帮助将JavaBean的属性值与JSON对象的键值对进行映射,从而实现JSON与Java对象的互换。 4. **commons-lang-2.1....
通过BeanUtils,Json-lib可以自动检测和序列化Java Bean的属性。 4. commons-collections-3.2.2.jar:这个库提供了集合操作的扩展,比如映射和过滤。在Json-lib中,它用于处理集合类型的对象,将其转换为JSON数组。...
3. `commons-beanutils-1.7.1-20061106.jar`: Apache Commons BeanUtils库简化了JavaBean对象的操作,能够方便地将JavaBean属性转换为JSON格式,或者将JSON数据填充到JavaBean中。 4. `ehcache-1.1.jar`: EhCache是...
攻击者可能尝试通过构造恶意输入来操纵JSON响应,因此确保对用户输入进行适当验证和过滤至关重要。 6. **性能优化**: - 对于大型应用,可以通过调整Struts2配置,如减少不必要的拦截器,或者使用缓存机制来提高...
### JSON与Java Bean之间的转换:理解JSON-lib的运用 在现代软件开发中,尤其是在Web服务和前后端分离架构中,JSON(JavaScript Object Notation)作为数据交换格式的重要性日益凸显。它简洁、轻量且易于人阅读,...
2. **commons-collections.jar**:Apache Commons Collections库提供了大量对集合操作的工具类和算法,如转换、查找、过滤等,`json-lib`在处理JSON对象时可能需要用到。 3. **commons-lang-2.4.jar**:Apache ...
标题中的"commons系列 ezmorph-1.0.4 filterbuilder json-lib-2.4-jdk15 htmlparser"提到了几个关键的Java库,它们在IT领域中扮演着重要角色,尤其在服务器端开发中。让我们逐一深入探讨这些库的功能和应用场景。 1...
在JSON转换过程中,它可能用于辅助数据结构的处理,比如遍历、过滤或者转换List。 4. **commons-lang-2.6.jar**:Apache Commons Lang是一个包含大量实用工具方法的Java类库,用于补充Java的标准库。在List到JSON的...
在处理JSON时,可能需要使用到它的功能,如列表和映射的遍历、查找、过滤等。 3. **commons-lang-2.3.jar**:这是Apache Commons Lang库的一个版本,它包含了一些有用的Java语言实用工具,如字符串处理、日期时间...
另外,通过设置`JsonConfig`对象,可以指定属性过滤器`PropertyFilter`,从而决定哪些属性应该被包含在JSON中。 7. **测试**:编写测试类,如`JsonlibTest`,使用JUnit进行单元测试,验证Java对象与JSON之间的转换...
这些文件包括:commons-beanutils、commons-collections、commons-digester、commons-lang、commons-logging、dom4j、ezmorph、freemarker、javassist、json-lib、log4j、ognl、struts2-core、xml-apis 和 xwork。...
- **用途**:json-lib 是一个用于处理JSON数据的Java库,它提供了将Java对象序列化为JSON字符串以及反序列化JSON字符串为Java对象的功能。这对于在Web应用中与服务器进行数据交互非常有用。 - **特点**: - 支持...
可以通过`JsonConfig`类配置转换规则,例如定义自定义的`JsonValueProcessor`来处理特定类型的字段,或者使用`PropertyFilter`来过滤JSON序列化过程中不想包含的属性。 在实际应用中,除了JSON-lib之外,还有其他的...
2. `commons-beanutils.jar`则是Apache Commons BeanUtils库,它简化了Java Bean的操作,可以方便地将Bean属性转化为JSON对象。 3. `commons-collections-3.0.jar`包含了Apache Commons Collections库,提供了丰富的...
在处理JSON时,我们可能需要对数据进行操作,如过滤、排序或转换,Commons Collections提供了这些功能,使得处理复杂的数据结构变得更加简单。 json-lib是一个针对多种Java平台的JSON库,它提供了一种将Java对象...
在处理JSON时,这个库可以用来方便地读取和设置Java Bean的属性,这对于将Java对象映射到JSON或者从JSON恢复Java对象非常有用。 4. **commons-lang.jar**:Apache Commons Lang是Apache Commons项目的一部分,提供...