1. 简单使用
@Data
@AllArgsConstructor
public class User {
@JsonView(UserViews.UserSimpleView.class)
private Long id;
@JsonView(UserViews.UserSimpleView.class)
private String name;
@JsonView(UserViews.UserDetailView.class)
private String password;
}
一个User类,如果在视图层不想返回password
-
一般会创建UserVo类,使用BeanUtils.copyProperties()复制相关属性并返回
-
也可以在对应的Mapping下使用@JsonView(UserViews.UserSimpleView.class)
@JsonView是jackson json中的一个注解,Spring mvc同样支持这个注解,
它的作用就是控制输入输出后的json。
public interface UserViews {
interface UserView {
}
interface UserSimpleView extends UserView {
}
interface UserDetailView extends UserView, UserSimpleView {
}
}
2.稍微复杂使用
@Data
@AllArgsConstructor
public class User {
@JsonView(UserViews.UserSimpleView.class)
private Long id;
@JsonView(UserViews.UserSimpleView.class)
private String name;
@JsonView(UserViews.UserDetailView.class)
private String password;
@JsonView(UserViews.UserDeptView.class)
private Dept dept;
@JsonView(UserViews.UserRoleView.class)
private Role role;
}
这里想返回user,dept,role的信息,分别在相应类中加上注解,在写个接口继承各自的view
public interface UserViews {
interface UserView {
}
interface UserSimpleView extends UserView {
}
interface UserDetailView extends UserView, UserSimpleView {
}
interface UserDeptView extends UserView, UserSimpleView, DeptViews.DeptView {
}
interface UserRoleView extends UserView, RoleViews.RoleView {
}
interface UserDeptRoleView extends UserView, UserDeptView, UserRoleView {
}
}
public interface ResultViews {
interface ResultView {
}
interface ResultUserDeptRoleView extends ResultView, UserViews.UserDeptRoleView {
}
}
@RestController
public class TestController {
@GetMapping
@JsonView(ResultViews.ResultUserDeptRoleView.class)
public User getUser() {
return new User(1L, "张三", "123***", new Dept(1L, "dept1"), new Role(1L, "Java"));
}
}
最终返回的结果如下:
{
id: 1,
name: "张三",
dept: {
id: 1,
name: "dept1"
},
role: {
id: 1,
name: "Java"
}
}
就到这里了,有不对的地方欢迎批评指教!