@JsonView的用法

Posted 程序员爱学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@JsonView的用法相关的知识,希望对你有一定的参考价值。

我们来描述一个这样的业务需求,首先有两个URL,

A: 为获取用户详情信息包含用户的所有字段(用户名,密码)
B: 为获取用户信息字段(只要用户名)

怎么处理呢?可能会想到建一个USER类然后返回不同的属性。但是这样写法确实Low的一逼。@JsonView可以十分方便的解决以上问题。下面我来介绍一下@JsonView

@JsonView是jackson json中的一个注解,Spring mvc同样支持这个注解,它的作用就是控制输入输出后的json。

一、 @JsonView的使用步骤

1、使用接口声明多个视图

2、在对象属性的get方法上指定视图

 1import org.hibernate.validator.constraints.NotBlank;
2import com.fasterxml.jackson.annotation.JsonView;
3public class User {
4    //声明一般视图接口 只允许这个视图返回用户名属性
5    public interface UserSimpView{};
6    //声明完整视图接口 允许返回用户名密码属性 由于集成了一般视图接口  含义是拥有了一般视图所具有的返回属性
7    public interface UserDetailView extends UserSimpView{};
8    private Integer Id;
9    private String userName;
10    private String passWord;
11    public User() {
12    }
13    public User(Integer Id, String userName, String passWord) {
14        this.Id = Id;
15        this.userName = userName;
16        this.passWord = passWord;
17    }
18    @JsonView(UserSimpView.class)
19    public Integer getId() {
20        return Id;
21    }
22    public void setId(Integer id) {
23        Id = id;
24    }
25    @JsonView(UserSimpView.class)
26    public String getUserName() {
27        return userName;
28    }
29    public void setUserName(String userName) {
30        this.userName = userName;
31    }
32    @JsonView(UserDetailView.class)
33    public String getPassWord() {
34        return passWord;
35    }
36    public void setPassWord(String passWord) {
37        this.passWord = passWord;
38    }
39    @Override
40    public String toString() {
41        return "User [Id=" + Id + ", userName=" + userName + ", passWord=" + passWord + "]";
42    }
43}

3、在controller上指定视图

 1@RestController
2@RequestMapping("/user")
3public class UserController {
4
5    @GetMapping(produces="application/json;charset=UTF-8")
6    @JsonView(UserDetailView.class)
7    public List getUserAll(@RequestParam("token") String token){
8
9        List<User> userList = new ArrayList<>();
10        userList.add(new User(1,"二十岁以后特殊视图0","123456特殊视图"));
11        userList.add(new User(2,"二十岁以后特殊视图1","qweqwe特殊视图"));
12        userList.add(new User(3,"二十岁以后特殊视图2","asdgdd特殊视图"));
13
14        return userList;
15    }
16}

二、 编写测试类

当我使用完整视图的情况下

 1@RestController
2@RequestMapping("/user")
3public class UserController {
4
5    @GetMapping(produces="application/json;charset=UTF-8")
6    @JsonView(UserDetailView.class)
7    public List getUserAll(@RequestParam("token") String token){
8
9        List<User> userList = new ArrayList<>();
10        userList.add(new User(1,"二十岁以后特殊视图0","123456完整视图"));
11        userList.add(new User(2,"二十岁以后特殊视图1","qweqwe完整视图"));
12        userList.add(new User(3,"二十岁以后特殊视图2","asdgdd完整视图"));
13
14        return userList;
15    }
16}

返回结果为:

1[{"userName":"二十岁以后特殊视图0","passWord":"123456完整视图","id":1},{"userName":"二十岁以后特殊视图1","passWord":"qweqwe完整视图","id":2},{"userName":"二十岁以后特殊视图2","passWord":"asdgdd完整视图","id":3}]

当我使用特殊视图的情况下

 1@RestController
2@RequestMapping("/user")
3public class UserController {
4
5    @GetMapping(produces="application/json;charset=UTF-8")
6    @JsonView(UserSimpView.class)
7    public List getUserAll(@RequestParam("token") String token){
8
9        List<User> userList = new ArrayList<>();
10        userList.add(new User(1,"二十岁以后特殊视图0","123456完整视图"));
11        userList.add(new User(2,"二十岁以后特殊视图1","qweqwe完整视图"));
12        userList.add(new User(3,"二十岁以后特殊视图2","asdgdd完整视图"));
13
14        return userList;
15    }
16}

返回结果为:

1[{"userName":"二十岁以后特殊视图0","id":1},{"userName":"二十岁以后特殊视图1","id":2},{"userName":"二十岁以后特殊视图2","id":3}]



以上是关于@JsonView的用法的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 加载源图像固定用法(代码片段,不全)

JsonView 返回空的 json 对象

Vue之使用JsonView来展示Json树

SQL Select 语句的用法

css [JSONView Solarized Dark]用于JSONView扩展的Solarized Dark配色方案。 #solarized #jsonview

@JsonView