用来过滤序列化对象的属性,可以有选择的序列化对象,首先定义一个 View 类,里面包含我们对要序列化的字段的定义,也可以将 View 类理解为一组标识。
首先使用接口来声明试图,userSimpleView 和 userDetailView,然后在属性的 get 方法上面指定视图:
public class User {
public interface userSimpleView {};
public interface userDetailView extends userSimpleView {};
private String id;
@MyConstaint(message = "这是一个测试")
private String username;
@NotBlank(message = "密码不能为空")
private String password;
@Past(message = "生日必须是过去的时间")
private Date birthday;
// 属性 id 属于 userSimpleView 视图
@JsonView(userSimplyView.class)
public void getId() {
return id;
}
public void setId(String id){
this.id = id;
}
// 属性 username 属于 userDetailView 视图
@JsonView(userDetailView.class)
public void getUsername() {
return username;
}
public void setUsername(){
this.username = username;
}
@JsonView(userSimplyView.class)
public void getPassword() {
return password;
}
public void setPassword(){
this.password= password;
}
}
最后在 Controller 方法上面指定具体某个视图:
@GettingMapping("/list")
@JsonView(User.UserSimpleView.class)
public List<User> query(@Valid UserQueryCondition condition) {
List<User> users = new ArrayList<>();
User user = new User();
user.setPassword("123");
users.add(user);
return user;
}
@GettingMapping("/{id:\\d+}")
@JsonView(User.UserDetailView.class)
public User getInfo(@PathVariable String id){
User user = new User();
user.setUsername("seina");
return user;
}