@JsonView注解可以用来过滤序列化对象的字段属性,可以用来定义返回相同的Json的时候,过滤掉哪些属性,可能说的不是很清楚,打个比方,现在在Controller中有两个方法都是以Json的形式返回的User对象(有userName和password两个属性),但是有一个方法我只想返回User对象的userName,不想返回password,有一个方法我userName和password都要返回。这个时候就可以用上@JsonView注解了。

在User类中定义两个接口用来声明多个视图

在User对象中定义了UserDetail和UserInfo两个接口,其实也就是一种标记的作用;这里UserInfo继承了UserDetail,有了这个继承关系的话,当我想显示UserInfo的时候,也会将UserDetail里面定义的字段也显示出来。

@JsonView的使用_字段

在类的get方法上指定视图

/**
* Created by Dongguabai on 2018-06-21 0:28
*/
@Setter
public class User {
public interface UserDetail{}

public interface UserInfo extends UserDetail{}

/**
* 在UserInfo视图上展示userNamw这个字段;
* 要注意的是UserInfo继承UserDetail,所以展示的时候也会展示UserDetail视图中的字段,也就是password字段
* @return
*/
@JsonView(UserInfo.class)
public String getUserName() {
return userName;
}

/**
* 在UserDetail视图上展示password字段
* @return
*/
@JsonView(UserDetail.class)
public String getPassword() {
return password;
}

private String userName;
private String password;

}

在Controller方法上指定视图

@JsonView的使用_字段_02

测试结果:

@JsonView的使用_字段_03

@JsonView的使用_User_04