@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的用法的主要内容,如果未能解决你的问题,请参考以下文章
css [JSONView Solarized Dark]用于JSONView扩展的Solarized Dark配色方案。 #solarized #jsonview