猿问

SSM框架下前后端分离@ResponseBody返回json如何忽略特定属性

model 代码:

public class A{ 
   private long id;    
   private String name;    
   private String avatar;    
   private int score;    
   private B b;    
   //......setter and getter
}

controller代码:

@RequestMapping("/A")@ResponseBodypublic A getModel(){
    A a = new A();
    a.setName("one");
    a.setAvatar("avatar.jpg");    
    return a;
}

那么在前端请求/A时就会得到:

{id:0,name:"one",avatar:"avatar.jpg",score:0,b:null}

这不是我希望的结果,我希望前端只能拿到它所需要的name 和 avatar。

不完美的解决方案

用mybatis时,每次查询结果数据,用Map来承载,而不是bean,在Controller中也是如此(甚至可以剔除model层)。但这样就要求对数据库表非常了解,而牺牲了很多便利操作(如 增、改操作)


慕码人8056858
浏览 2619回答 2
2回答

沧海一幻觉

可以使用jackson的Include.NON_DEFAULT 属性为默认值不序列化 ObjectMapper mapper = new ObjectMapper();mapper.setSerializationInclusion(Include.NON_NULL);//通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化 //Include.Include.ALWAYS 默认 //Include.NON_DEFAULT 属性为默认值不序列化 //Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化 //Include.NON_NULL 属性为NULL 不序列化

偶然的你

反射解决,用字符串的形式设置所有获取的字段名。通过反射获取到该类和所要获取的字段get方法,保存在一个map中
随时随地看视频慕课网APP
我要回答