spring boot 之@JsonView 简单介绍

@JsonView是jackson json中的一个注解,spring webmvc也支持这个注解。

这个注解的作用就是控制输入输出后的json.

假设我们有一个用户类,其中包含用户名和密码,一般情况下如果我们需要序列化用户类时,密码也会被序列化,在一般情况下我们肯定不想见到这样的情况。但是也有一些情况我们需要把密码序列化,如何解决这两种不同的情况呢?

使用@JsonView就可以解决。

看下面的简单例子:

public class User {
    public interface WithoutPasswordView {};
    public interface WithPasswordView extends WithoutPasswordView {};  

    private String username;
    private String password;  

    public User() {
    }  

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }  

    @JsonView(WithoutPasswordView.class)
    public String getUsername() {
        return this.username;
    }  

    @JsonView(WithPasswordView.class)
    public String getPassword() {
        return this.password;
    }
}  

有这样一个简单的User对象,包含两个简单的属性。

在这个对象中定义了两个接口,其中WithoutPasswordView指的就是不带密码的视图,WithPasswordView指的是带密码的视图,并且继承了WithoutPasswordView的视图。

@JsonView 中的这个视图不仅可以用接口,也可以是一般的类,或者说只要有Class属性就能当成视图使用。

类或接口间的继承,也是视图之间的继承,继承后的视图会包含上级视图注解的方法。

@JsonView 可以写到方法上或者字段上。

下面通过代码测试上面的User对象:

public static void main(String[] args) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    //创建对象
    User user = new User("isea533","123456");
    //序列化
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    objectMapper.writerWithView(User.WithoutPasswordView.class).writeValue(bos, user);
    System.out.println(bos.toString());  

    bos.reset();
    objectMapper.writerWithView(User.WithPasswordView.class).writeValue(bos, user);
    System.out.println(bos.toString());
} 

先创建一个objectMapper,然后通过writerWithView工厂方法创建一个指定视图的ObjectWritter,然后通过writeValue输出结果。

输出结果:

{"username":"isea533"}
{"username":"isea533","password":"123456"}

@JsonView 使用起来就是这么简单,没有太复杂的东西。

@JsonView 属性可以写在注解上,这点不知道是否类似Spring中的自定义注解,如果有了解的人可以留言,谢谢。

另外在Spring-webmvc中使用@JsonView 时要注意,虽然该注解允许指定多个视图,但是spring-webmvc只支持一个参数(视图)。

时间: 2024-10-12 06:28:58

spring boot 之@JsonView 简单介绍的相关文章

基于 spring boot + mybatis-plus实现简单的转账业务

需求:aa向bb转账2000 1.准备工作 简单的数据库 2.创建springboot项目,添加依赖pom.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

阿里微服务专家手写Spring Boot 实现一个简单的自动配置模块

为了更好的理解 Spring Boot 的 自动配置和工作原理,我们自己来实现一个简单的自动配置模块. 假设,现在项目需要一个功能,需要自动记录项目发布者的相关信息,我们如何通过 Spring Boot 的自动配置,更好的实现功能呢? 实战的开端 – Maven搭建 先创建一个Maven项目,我来手动配置下 POM 文件. 参数的配置 - 属性参数类 首先,我们定义一个自定义前缀,叫做 custom 吧.之前说到,这里的配置参数,可以通过 application.properties 中直接设置

关于spring boot上手的一点介绍

在spring官网网址 https://spring.io/guides 下,有许多相关介绍,包括可以构建的例子程序. 使用intellij idea,可以通过新建 spring boot initializr 项目,选择组件,搭建spring boot项目. 或者通过 https://start.spring.io/ 构建,效果和上边应该是一样,但没试过.intellij idea方式按介绍,也是通过这个调用来实现的. 另外看介绍,vscode也可以调用 spring boot initial

Spring Boot + Docker + K8S 简单示例

前言 最近看了看kubernetes(k8s),感觉用这个管理docker确实比自己写一坨脚本进步太多了,简直不是一个次原的东西. 看着k8s的官方文档随手写了个小Demo,一个基于k8s的spring boot服务. 代码:https://github.com/csonezp/echo-service 前置条件 电脑已安装docker/k8s/jdk 建议安装Docker Desktop,并启用自带k8s. https://docs.docker.com/docker-for-mac/inst

spring boot 结合jsp简单示例

引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- jstl是?个JSP标签集合,它封装了JSP应?的通?核?功能. --> <dependency> <groupId>javax.servle

Spring 配置log4j和简单介绍Log4J的使用

Log4j 是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务器.NT的事 件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就 是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 如此强大的优越性,实际上手并不难,尤其在spring框架下,使用log4j更是容易,下面介绍一下spri

@JsonView 简单介绍[z]

@JsonView是jackson json中的一个注解,Spring webmvc也支持这个注解. 这个注解的作用就是控制输入输出后的json. 假设我们有一个用户类,其中包含用户名和密码,一般情况下如果我们需要序列化用户类时,密码也会被序列化,在一般情况下我们肯定不想见到这样的情况.但是也有一些情况我们需要把密码序列化,如何解决这两种不同的情况呢? 使用@JsonView就可以解决. 看下面的简单例子: public class User { public interface Without

Spring入门篇7 ---- 简单介绍AOP

Spring-AOP 面向切面编程,它是对OOP的一种补充,OOP一般就是纵向关系,举个例子我们发一个用户信息的请求,正常情况下流程就是:身份验证 ——查询用户信息——日志记录(是情况而定)——返回信息,这个就是OOP面向对象编程,但如果有很多业务的话,那么身份验证,日志处理(一般AOP不会用于业务日志处理,否则以后运维的时候比较麻烦),会被调用很多次,这个时候可以引入AOP,他是面向切片处理,它会将程序横向截断,例如把权限模块进行抽离,实现解耦,如果后续权限需要调整只需要调整抽离出来的权限组件

Spring boot 集成Dubbo简单版,准备工作,

一.GitHub上找寻Dubbo资源 阿里巴巴在其GitHub上已经写好一个Github案例所以我们只要进入其Git上就可以看到和clone这个项目 二.阿里巴巴GitHub使用 https://github.com/alibaba      首页      然后再搜索框输入,boot,就会找到springboot,如图      点开红圈部分,就可以看到其使用的方法 原文地址:https://www.cnblogs.com/liuyangfirst/p/9311502.html