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

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

生成 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 属性。

本文标题为:java生成json实现隐藏掉关键属性

基础教程推荐