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


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)