@JsonView的使用详解
一 问题描述
写项目的时候一个类中的属性有的需要返回,有的不需要返回。例如在A功能中只需要看到用户名和总在线时长就行,但是在B功能中关于用户的所有的属性都需要看到。这就需要有选择的
二 解决办法
因为是通过Json返回给前端的,所以相当于我现在要有选择的序列化对象。JsonView
可以过滤序列化对象的字段属性,可以使你有选择的序列化对象。
三 基本用法
3.1 定义一个接口
相当于一个标记,之后只要字段上标记了这个接口就说明这几个字段属于同时只返回的
public interface View {
}
3.2 Pojo类
@Data
public class User{
String id;
@JsonView(View.class)
String name;
@JsonView(View.class)
int department;
String allTimeString;
@JsonView(View.class)
int allTimeInt;
@JsonView(View.class)
boolean isOnline;
@JsonIgnore
String mac;
List<OnOffLine> onOffLine;
}
3.3 Controller上标记
只有在url请求/onOffShow的时候才会选择性的返回上个pojo标记的字段
@CrossOrigin
@RestController
public class OnOffLineShow {
@Autowired
AllUserList allUserList;
@GetMapping(value = "/onOffShow")
@JsonView(View.class)
public ServiceResult findSomeday() {
return ServiceResult.success(allUserList.allUserList);
}
}
四 问题
看网上这样实现之后都可以成功,但是我的就返回一个这个{}
【空】,那为什么?最后发现因为相当于嵌套类。ServiceResult
中的一个字段是刚才标记的这个pojo,所以解决办法: