簡體   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