用途:当我们页面需要的返回的json数据形式不是从表映射到java实体类的所有字段,只需要一部分字段时,该怎么做?如果将java实体所有的属性都转换为json的数据格式返回给客户端,这样难免会太耗费流量。
需要的包:json-lib.jar
++++++++++++++++++++++++++++++++++++++++++++++++++
例子:实际案例:在分页查询中的使用
++++++++++++++++++++++++++++++++++++++++++++++++++
jsp页面:使用的easyui的的datagrid创建表单
此时的ajax请求的url地址:/bos19/json/data.json
返回的数据格式是json格式:必须包含的字段有:id ,name,age
即就是:
上面的这段返回的json字符串满足要求,但是同样存在问题,当页面需要的json数据只需要三个字段返回的字段一些是无用的,虽然现在不影响(数据量少),当数据量较多的时候,就会出现流量的浪费问题。这给用户体验带来极大的不利。
此时我只需要返回的json只有三个字段:
这种情况怎么处理?
思路:首先,我们根据url调用响应的Action中,调用service,调用dao 然后查询数据库,返回查询出的数据,然后将数据转换为json,在转换为json的时候,调用json-lib提供的函数,在转换前进行字段的过滤即可在转换后得到过滤后的字段的json数据。
数据查询的过程我就不再展示:(重点展示如何对java对象数据进行过滤)
@Controller
@Scope(“prototype”)
public class StaffAction extends ActionSupport implements ModelDriven{
private Student student= new Student();
public getModel(){
return student;
}
//注入Service
@Autowired
private IStaffService staffService;
public String JSonRet() throws IOException{
//service层的调用就不再展示
list<Student> list = staffService.findAll();
//将list集合对象转为json返回
//1 先设置一个封装不需要字段的封装配置对象
JsonConfig jsonConfig = new JsonConfig();
//2将不需要的字段进行设置到对象中
jjsonConfig.setExcludes(new String[]{"hobby","sex"});
//将list集合转换成jsonArray 第二个参数是将转换后的json数组中不需要的字段封装到对象中,然后执行的时候,就会将不需要的字段去除掉
JSONArray jsonObject = JSONArray.fromObject(list, jsonConfig);
//将json数组装换为json形式的字符串
String json = jsonObject.toString();
ServletActionContext.getResponse().setContentType("text/json;charset=UTF-8");
//把包装的数据返回给easyui的数据表格(easyui对应的jsp),会自动对数据进行填充:
ServletActionContext.getResponse().getWriter().print(json);
return NONE;
}
}