java生成json实现隐藏掉关键属性

2023-12-10java编程
78

生成 JSON 格式字符串通常使用的是 JSON 序列化器,Java 中最常用的序列化器是 Jackson。要隐藏关键属性,我们可以使用 Jackson 提供的注解 @JsonIgnore,该注解可以标记某个属性在序列化时不进行序列化。

下面是完整的攻略步骤:

步骤一:导入依赖

在 pom.xml 文件中导入 Jackson 相关的依赖。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.4</version>
</dependency>

步骤二:定义 JavaBean

定义一个 JavaBean,里面包含要隐藏的关键属性。

public class User {
    private String name;
    private Integer age;
    @JsonIgnore
    private String password;

    // 省略 getter/setter 方法
}

上面的例子中,我们使用了 @JsonIgnore 注解标注了 password 属性,这个属性在序列化时将会被忽略。

步骤三:序列化 JavaBean

在代码中使用 Jackson 序列化器,把 JavaBean 序列化为 JSON 字符串。

ObjectMapper mapper = new ObjectMapper();
User user = new User();
user.setName("张三");
user.setAge(20);
user.setPassword("123456");

String json = mapper.writeValueAsString(user);
System.out.println(json);

输出的结果是:

{"name":"张三","age":20}

可以看到,password 属性已经被忽略了。

示范一:spring boot中使用注解隐藏关键属性

在 Spring Boot 中使用 Jackson 的 @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) 注解可以简单的隐藏关键属性。下面的例子演示了在 Spring Boot 中使用注解隐藏密码属性。

User 类中添加注解。

public class User {
    private String name;
    private Integer age;
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;

    // 省略 getter/setter 方法
}

在 Spring Boot 中写一个控制器,返回 User 对象。

@RestController
public class UserController {
    @GetMapping("/user")
    public User getUser() {
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        user.setPassword("123456");
        return user;
    }
}

当访问 /user 接口时,返回的 JSON 数据将不包含密码属性。

示范二:手动配置 ObjectMapper

在某些情况下,我们需要对一个已经存在的类做特殊处理,例如隐藏某些敏感信息。这时候,我们可以手动配置 ObjectMapper。

public class User {
    private String name;
    private Integer age;
    private String password;

    // 省略 getter/setter 方法
}

public class Main {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        SimpleBeanPropertyFilter simpleFilter = SimpleBeanPropertyFilter
                .serializeAllExcept("password");
        FilterProvider filterProvider = new SimpleFilterProvider()
                .addFilter("myFilter", simpleFilter);
        mapper.setFilterProvider(filterProvider);

        User user = new User();
        user.setName("张三");
        user.setAge(20);
        user.setPassword("123456");

        String json = mapper.writerWithFilter(filterProvider).writeValueAsString(user);
        System.out.println(json);
    }
}

在上面的代码中,我们自定义了一个 SimpleBeanPropertyFilter,并把它放到了一个 SimpleFilterProvider 中,添加了一个过滤器名字为 myFilter。然后,我们把整个 FilterProvider 设置到了 ObjectMapper 中。

当使用 writeValueAsString() 方法序列化对象时,我们指定了使用在 ObjectMapper 中定义的 myFilter 过滤器。这样,序列化后的 JSON 数据将不包含 password 属性。

The End

相关推荐

一文带你掌握Java8中Lambda表达式 函数式接口及方法构造器数组的引用
Lambda表达式是Java 8中引入的新特性之一,它是一个匿名函数,可以捕获参数并表现为一个代码块,而不像方法一样需要一个固定的名称。它主要用于传递行为或代码块以及事件处理等操作。...
2023-12-11 java编程
30

基于Java 谈回调函数
下面为您详细讲解基于Java的回调函数。...
2023-12-11 java编程
21

java equals函数用法详解
在Java中,equals()是用来比较两个对象是否相等的函数。equals()方法是Object类中的方法,因此所有Java类都包含equals()方法。在默认情况下,equals()方法比较对象的引用地址是否相同,即两个对象是否是同一个实例。但是,我们可以覆盖equals()方法,来定义自...
2023-12-11 java编程
63

JavaWeb学习笔记分享(必看篇)
JavaWeb是Java在Web领域的应用,是目前非常热门的技术之一。但是JavaWeb涉及到的技术非常广泛,初学者很容易迷失方向。本文总结了JavaWeb的基础知识,为初学者提供了一份学习笔记分享,希望能够帮助大家快速入门。...
2023-12-11 java编程
8

Java中replace、replaceAll和replaceFirst函数的用法小结
在Java编程中,字符串操作是很常见的,而替换字符串是其中常用的操作之一。Java提供了三种函数用于替换字符串:replace、replaceAll和replaceFirst。这篇文章将为您详细介绍它们的用法。...
2023-12-11 java编程
121

基于Java中进制的转换函数详解
进制是数学中一种表示数值大小的方法,常见的进制有10进制、2进制、16进制等。...
2023-12-11 java编程
45