前言
之前写代码的时候,基本都是查到一个对象或者一个集合就抛给前端,没有注意过敏感数据泄露的问题,但这样会存在很大问题,还是应该按需返回。
下面先给个学习fastjson的网站
fastjson.w3c
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
代码
//第一种:在对象响应字段前加注解,这样生成的json也不包含该字段。
@JSONField(serialize=false)
private String name;
// 第二种:在对象对应字段前面加transient,表示该字段不用序列化,即在生成json的时候就不会包含该字段了。
private transient String name;
// 第三种:使用fastjson的拦截器
PropertyFilter profilter = new PropertyFilter(){
@Override
public boolean apply(Object object, String name, Object value) {
if(name.equalsIgnoreCase("last")){
//false表示last字段将被排除在外
return false;
}
return true;
}
};
json = JSON.toJSONString(user, profilter);
System.out.println(json);
//第四种,直接填写属性
SimplePropertyPreFilter filter = new SimplePropertyPreFilter(类名.class, "要发送的","字段名");
//将对象通过过滤器转化为json,
String result = JSONObject.toJSONString(对象,filter);
//如果前端要的是一个对象也有方法
JSONObject obj=JSON.parseObject(result );//将json字符串转换为json对象
/**如果查出来的是一个对象集合,也可以这样给前端一个过滤过的list对象数组。
* JSONObject[] obj = new JSONObject[0];
* String result = JSONObject.toJSONString(userList.get(i),filter);
obj=new JSONObject[]{JSONObject.parseObject(result)};
listA.add(obj);