@JsonView的用法 4年前

前端开发
159
@JsonView的用法

    我们来描述一个这样的业务需求,首先有两个URL,/A:为获取用户详情信息包含用户的所有字段(用户名,密码),/B:为获取用户信息字段(只要用户名),怎么处理呢?可能会想到建一个USER类然后返回不同的属性。但是这样写法确实Low的一逼。@JsonView可以十分方便的解决以上问题。下面我来介绍一下@JsonView。

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

一、 @JsonView的使用步骤

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

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

import org.hibernate.validator.constraints.NotBlank;
import com.fasterxml.jackson.annotation.JsonView;

public class User {
    
    //声明一般视图接口 只允许这个视图返回用户名属性
    public interface UserSimpView{};
    //声明完整视图接口 允许返回用户名密码属性 由于集成了一般视图接口  含义是拥有了一般视图所具有的返回属性
    public interface UserDetailView extends UserSimpView{};
    
    private Integer Id;
    
    private String userName;
    
    private String passWord;

    public User() {
    }

    public User(Integer Id, String userName, String passWord) {
        this.Id = Id;
        this.userName = userName;
        this.passWord = passWord;
    }
    
    @JsonView(UserSimpView.class)
    public Integer getId() {
        return Id;
    }

    public void setId(Integer id) {
        Id = id;
    }

    @JsonView(UserSimpView.class)
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
    @JsonView(UserDetailView.class)
    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    @Override
    public String toString() {
        return "User [Id=" + Id + ", userName=" + userName + ", passWord=" + passWord + "]";
    }
}

3、在controller上指定视图

@RestController
@RequestMapping("/user")
public class UserController {
    
    @GetMapping(produces="application/json;charset=UTF-8")
    @JsonView(UserDetailView.class)
    public List getUserAll(@RequestParam("token") String token){

        List<User> userList = new ArrayList<>();
        userList.add(new User(1,"二十岁以后特殊视图0","123456特殊视图"));
        userList.add(new User(2,"二十岁以后特殊视图1","qweqwe特殊视图"));
        userList.add(new User(3,"二十岁以后特殊视图2","asdgdd特殊视图"));

        return userList;
    }

二、 编写测试类

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

@RestController
@RequestMapping("/user")
public class UserController {
    
    @GetMapping(produces="application/json;charset=UTF-8")
    @JsonView(UserDetailView.class)
    public List getUserAll(@RequestParam("token") String token){

        List<User> userList = new ArrayList<>();
        userList.add(new User(1,"二十岁以后特殊视图0","123456完整视图"));
        userList.add(new User(2,"二十岁以后特殊视图1","qweqwe完整视图"));
        userList.add(new User(3,"二十岁以后特殊视图2","asdgdd完整视图"));

        return userList;
    }

返回结果为:

@JsonView的用法

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

@RestController
@RequestMapping("/user")
public class UserController {
    
    @GetMapping(produces="application/json;charset=UTF-8")
    @JsonView(UserSimpView.class)
    public List getUserAll(@RequestParam("token") String token){

        List<User> userList = new ArrayList<>();
        userList.add(new User(1,"二十岁以后特殊视图0","123456完整视图"));
        userList.add(new User(2,"二十岁以后特殊视图1","qweqwe完整视图"));
        userList.add(new User(3,"二十岁以后特殊视图2","asdgdd完整视图"));

        return userList;
    }

返回结果为:

@JsonView的用法

姐姐抱抱嘛
我会千里迢迢,披星戴月地赶来带你走,这一次换成我来保护你。
5
发布数
0
关注者
7310
累计阅读

热门教程文档

Javascript
24小节
Swift
54小节
React Native
40小节
Redis
14小节
Vue
25小节
广告