咱们来描述一个这样的业务需求,首先有两个URL,/A:为获取用户详情信息包含用户的全部字段(用户名,密码),/B:为获取用户信息字段(只要用户名),怎么处理呢?可能会想到建一个USER类而后返回不一样的属性。可是这样写法确实Low的一逼。@JsonView能够十分方便的解决以上问题。下面我来介绍一下@JsonView。java
@JsonView是jackson json中的一个注解,Spring mvc一样支持这个注解,它的做用就是控制输入输出后的json。json
import org.hibernate.validator.constraints.NotBlank; import com.fasterxml.jackson.annotation.JsonView; public class User { //声明通常视图接口 只容许这个视图返回用户名属性 public interface UserSimpView{}; //声明完整视图接口 容许返回用户名密码属性 因为集成了通常视图接口 含义是拥有了通常视图所具备的返回属性 public interface UserDetailView extends UserSimpView{}; private Integer Id; private String userName; private String passWord; public User() { } public User(Integer Id, String userName, String passWord) { this.Id = Id; this.userName = userName; this.passWord = passWord; } @JsonView(UserSimpView.class) public Integer getId() { return Id; } public void setId(Integer id) { Id = id; } @JsonView(UserSimpView.class) public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @JsonView(UserDetailView.class) public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } @Override public String toString() { return "User [Id=" + Id + ", userName=" + userName + ", passWord=" + passWord + "]"; } }
@RestController @RequestMapping("/user") public class UserController { @GetMapping(produces="application/json;charset=UTF-8") @JsonView(UserDetailView.class) public List getUserAll(@RequestParam("token") String token){ List<User> userList = new ArrayList<>(); userList.add(new User(1,"二十岁之后特殊视图0","123456特殊视图")); userList.add(new User(2,"二十岁之后特殊视图1","qweqwe特殊视图")); userList.add(new User(3,"二十岁之后特殊视图2","asdgdd特殊视图")); return userList; }
当我使用完整视图的状况下mvc
@RestController @RequestMapping("/user") public class UserController { @GetMapping(produces="application/json;charset=UTF-8") @JsonView(UserDetailView.class) public List getUserAll(@RequestParam("token") String token){ List<User> userList = new ArrayList<>(); userList.add(new User(1,"二十岁之后特殊视图0","123456完整视图")); userList.add(new User(2,"二十岁之后特殊视图1","qweqwe完整视图")); userList.add(new User(3,"二十岁之后特殊视图2","asdgdd完整视图")); return userList; }
返回结果为:app
当我使用特殊视图的状况下ide
@RestController @RequestMapping("/user") public class UserController { @GetMapping(produces="application/json;charset=UTF-8") @JsonView(UserSimpView.class) public List getUserAll(@RequestParam("token") String token){ List<User> userList = new ArrayList<>(); userList.add(new User(1,"二十岁之后特殊视图0","123456完整视图")); userList.add(new User(2,"二十岁之后特殊视图1","qweqwe完整视图")); userList.add(new User(3,"二十岁之后特殊视图2","asdgdd完整视图")); return userList; }
返回结果为:测试