业务场景:比如说一个User对象,有两个字段,一个username,一个password,有一个获取用户信息的接口要返回这个User列表,但是不想要这个User列表的password字段。
还有一个接口要获取这个User列表,要全部字段。
解决场景:我们可以有多种方法,比如说获取list之后把user列表的密码全部设为空,然后再用其他注解来设置 为空的字段不显示
还可以在sql中就不查password字段。
但是 我们要介绍这个注解来实现这个功能。@jsonView
需要三步即可:
- 第一:用接口来声明多个视图
- 第二:在值对象的get方法上指定视图
- 第三:在controller方法上指定视图
话不多说~~~看代码------》
User.java
package com.imooc; import com.fasterxml.jackson.annotation.JsonView; import lombok.AllArgsConstructor; import lombok.Setter; /** * Created by 敲代码的卡卡罗特 * on 2018/4/14 22:58. */ @Setter @AllArgsConstructor public class User { public interface UserInfo{}; public interface UserDetail extends UserInfo{}; private String name; private String password; @JsonView(UserInfo.class) public String getName() { return name; } @JsonView(UserDetail.class) public String getPassword() { return password; } }
在user对象中声明两个接口(视图),一个继承另一个,你懂得!!!然后在字段的get方法上声明视图
Controller.java
@GetMapping("/hello") @JsonView(User.UserInfo.class) public HashMap hello() { HashMap hashMap = new HashMap(); User user1 = new User("liu","123"); User user2 = new User("zhang","456"); hashMap.put("u1",user1); hashMap.put("u2",user2); return hashMap; }
在controller中声明视图 自己看下结果吧。