记录下@JsonView注解的使用

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

  1. 一般会创建UserVo类,使用BeanUtils.copyProperties()复制相关属性并返回
  2. 也可以在对应的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"
     }
}

就到这里了,有不对的地方欢迎批评指教!

经验分享 程序员 微信小程序 职场和发展