繁体   English   中英

在 json 序列化期间为属性返回空值

[英]return empty value for property during json serialization

我在 java 中有一个 class 包含敏感数据,因此我想在导出数据时仅省略属性值。 尽管 JSON 中的属性名称应该仍然可用。

例子:

private String id;
private String username;
private String password;

我怎样才能只将 go 的密码设为空。 而不是让整个财产消失,

{"id":"asdasd0123213", "username":"smith", password: ""}

使用注释 @JsonSerialize 作为密码字段并创建 CustomSerialize class。 或创建方法:

@JsonGetter("password")
public String getEmptyPassword() {
    return "";
}

您也可以在没有自定义序列化程序的情况下解决它。 快速示例:

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class JacksonTest {
    private String id;
    private String username;
    @JsonIgnore
    private String password;

    @JsonProperty("password")
    public String getPassword() {
        return "";
    }

    @JsonProperty("password")
    public void setPassword(String password) {
        this.password = password;
    }

    @JsonIgnore
    public String getPasswordValue() {
        return password;
    }

    @Override
    public String toString() {
        return "JacksonTest{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

样品测试方法:

  public static void main(String[] args) throws JsonProcessingException {
            System.out.println(new JacksonTest("id1","user1","pass"));
            System.out.println((new ObjectMapper()).writeValueAsString(new JacksonTest("id1","user1","pass")));
            String json ="{\"id\":\"id1\",\"username\":\"user1\",\"password\":\"test\"}";
            System.out.println((new ObjectMapper()).readValue(json,JacksonTest.class));
        }

要点是使用@JsonIgnore忽略该属性,并为该属性放置一个自定义设置器和获取器,以便 jackson 将在序列化和反序列化时使用这些方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM