@JosnView (发现和PageHelper分页插件冲突导致无法返回Json)
作用:控制响应Json数据中的对象字段(即控制响应对象转json时,对象中的字段哪一些显示,哪一些不显示)
实现步骤:
- 使用接口来声明多个视图
- 在值对象的get方法上指定视图
- 在Controller方法上指定视图
###开始实现:
-
新建视图接口,例如:
- 普通视图接口(显示公开字段,即不会响应敏感字段暴露前端)
//普通视图接口 public interface SimpleView {}
- 详细视图接口,其继承普通视图(显示详细信息,即将敏感和普通详细的字段都暴露给前端)
public interface DetailView extends SimpleView{}
-
新建响应需要的对象(在对象的getter方法上声明为不同的视图)
public class Emp { private int id; private String name; private String password; private int age; private String money; //在getter方法上声明不同视图 @JsonView(SimpleView.class) //声明为普通视图 public int getId() {return id;} @JsonView(SimpleView.class) //声明为普通视图 public String getName() {return name;} @JsonView(SimpleView.class) //声明为普通视图 public int getAge() {return age;} @JsonView(DetailView.class) //声明为详细视图 public String getMoney() {return money;} @JsonView(DetailView.class) //声明为详细视图 public String getPassword() {return password;} //省略setter方法 }
-
新建请求的Controller
@RestController public class RestfulController { @Autowired private EmpMapper empMapper; //普通视图 @GetMapping("/emp") @JsonView(SimpleView.class) public ArrayList<Emp> getEmp(){ ArrayList<Emp> list = empMapper.getEmp(); return list; } //详细视图控制+正则限定id @GetMapping("/emp/{id:\\d+}")//在URl中做正则匹配 @JsonView(DetailView.class) public Emp getEmpById(@PathVariable int id){ //从数据库中根据Id检索出来一个对象 Emp emp = empMapper.getEmpById(id); return emp; } }
-
两个请求响应的结果
-
普通视图响应(只包含id、姓名、年龄)
[ { "id": 1, "name": "小明", "age": 12 }, { "id": 2, "name": "小红", "age": 1345613 } ]
-
详细视图响应(会包含密码、金额信息)
{ "id": 1, "name": "小明", "password": "GDFS1232", "age": 12, "money": "15412156" }
-