@JsonView的用法

Wesley13
• 阅读 681

    我们来描述一个这样的业务需求,首先有两个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的用法

点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
kenx kenx
3年前
SpringBoot @ModelAttribute 用法
前言项目中遇到这么一个使用场景,用户的登录信息给予token保存,在需要有登录信息的地方,每次都要去获取用户Id,但每次在请求方法中去获取用户信息,代码重复,冗余,很low于是想到了用@ModelAttribute这个属性使用场景不用@ModelAttribute时候在需要用户信息的请求中每次需要单独获取用户信息JavaStringtoken
Wesley13 Wesley13
3年前
java开发中使用类
com.fasterxml.jackson.annotation.JsonView@JsonView使用步骤:1.使用接口来声明多个视图2.在值对象的get方法上指定视图3.在C
Wesley13 Wesley13
3年前
@JsonView注解如何优雅的忽略字段返回
哈喽,好久不更新今天跑来更新了,这段时间换了新公司,有点小忙,废话就不多说了,我们直接开始正题吧。不知道大家有没有这样一个感觉,有些东西很简单,确实也非常简单,但是当要去写的时候总想不起来,多多少少有点瑕疵,要不少个括号,要不位置不对,反正我在写SQL语句的时候是深有体会,所以虽然这个注解很简单,但是我还是写下来记录一下,另外跟大家分享一下,方便
Stella981 Stella981
3年前
Spring Security使用详解11(获取当前用户的用户名、id)
有时我们需要获取当前登录的用户信息(比如用户名),通常有如下几种方式来实现。方法1:通过Authentication.getPrincipal()获取用户信息(1)通过Authentication.getPrincipal()可以获取到代表当前用户的信息,这个对象通常是UserDetails的实例。通过UserDeta
Easter79 Easter79
3年前
SpringMvc @JsonView 使用方式
准确来说,@JsonView注解不是Spring的,它位于jacksonannotation包中;作用:SpringMvc使用@ResponseBody将结果以json返回客户端, 有些实体类的某些字段可以不被包括在JSON中;思考了这种情况可能适用的情形:有多方调用这个接口,需要针对不同业务场景返回不同形式的JSON,但是这种情况的话只拷贝需要
Easter79 Easter79
3年前
SpringCloud(第 001 篇)简单用户微服务
SpringCloud(第001篇)简单用户微服务一、大致介绍通过RestAPI接口/simple/{id}来简单获取H2数据库中的用户信息,并且数据库中的字段与实体User类的字段相互映射。二、实现步骤2.1
Wesley13 Wesley13
3年前
EditText数据回显
首先我们假设我们把用户名和密码都保存在data/data/com.xxx.xxx/files/info.txt中,格式为:用户名密码。我们接下来要做的就是把info.txt中保存的用户名和密码分别回显在两个EditText中。下面为自定义的回显用户名和密码的方法:publicstaticMap<String,StringgetSaveUs
Stella981 Stella981
3年前
Chrome超好用的Json视图工具
效果图!在这里插入图片描述(https://oscimg.oschina.net/oscnet/up8f5456d4087d42c39121d14af1155a82.png)Jsonview插件下载安装①下载:你可以从chrome应用商店里找到Jsonview插件,如果你的chrome应用商店无法打开,
可莉 可莉
3年前
18_django的用户模型和扩展django的用户模型
\TOC\User模型User模型是这个框架的核心部分。他的完整的路径是在django.contrib.auth.models.User。以下对这个User模型做一个简单的了解:字段:内置的User模型拥有以下的字段:1.username:用户名。150个字符以内。可以包含数字和英文字符