视图控制 @JsonView注解的使用

@JosnView发现和PageHelper分页插件冲突导致无法返回Json
作用:控制响应Json数据中的对象字段(即控制响应对象转json时,对象中的字段哪一些显示,哪一些不显示)
实现步骤:

  • 使用接口来声明多个视图
  • 在值对象的get方法上指定视图
  • 在Controller方法上指定视图

###开始实现:

  1. 新建视图接口,例如:

    • 普通视图接口(显示公开字段,即不会响应敏感字段暴露前端)
    //普通视图接口
    public interface SimpleView {}
    
    • 详细视图接口,其继承普通视图(显示详细信息,即将敏感和普通详细的字段都暴露给前端)
    public interface DetailView extends SimpleView{}
    
  2. 新建响应需要的对象(在对象的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方法
    }
    
  3. 新建请求的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;
        }
    
    }
    
  4. 两个请求响应的结果

    • 普通视图响应(只包含id、姓名、年龄)

      [
          {
              "id": 1,
              "name": "小明",
              "age": 12
      	},
          {
              "id": 2,
              "name": "小红",
              "age": 1345613
          }
      ]
      
    • 详细视图响应(会包含密码、金额信息)

      {
          "id": 1,
          "name": "小明",
          "password": "GDFS1232",
          "age": 12,
          "money": "15412156"
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值