Java用JSONObject.fromObject()或者JSONArray.fromObject()的时候因为Bean的关联会出现很多错误,很多时候,我们也不需要一个Bean中所有的属性都序列化成Json数据格式,而fromObject默认是序列化所有的,因为我们需要过滤一些不常用或者不需要的属性。
package com.renyiwei.wydns.struts2.action.api; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.util.PropertyFilter; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import com.renyiwei.wydns.domain.Client; import com.renyiwei.wydns.service.ClientService; import com.renyiwei.wydns.struts2.action.common.BaseAction; @Scope("prototype") @Controller("apiClientAction") public class ClientAction extends BaseAction { private String account; @Resource private ClientService clientService; public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } private JSONObject resultObj; public JSONObject getResultObj() { return resultObj; } public void setResultObj(JSONObject resultObj) { this.resultObj = resultObj; } public String queryAjax() { List clientList = clientService.getByLoginName(this.getAccount()); // 建一个json序列化的配置 JsonConfig config = new JsonConfig(); // 设置属性过滤 参数为实现了PropertyFilter接口的匿名内部类 config.setJsonPropertyFilter(new PropertyFilter() { // 实现apply方法 public boolean apply(Object object, String property, Object value) { if (object instanceof List || object instanceof Client || object instanceof Map || object instanceof String) { if (object instanceof Client) { if ("email".equals(property) || "phonenumber".equals(property) || "id".equals(property)) { return false; } else { return true; } } else { return false; } } // false就是通过 return true; } }); Map resultMap = new HashMap(); resultMap.put("result", clientList); // 序列化的时候把配置的config传进去 resultObj = JSONObject.fromObject(resultMap, config); return SUCCESS; } }