簡體   English   中英

Java Json Jackson保存沒有getter和setter的私有字段

[英]Java Json Jackson saving private fields without getters and setters

我正在使用Jackson將我的java對象(Person.class)保存為json文件,並使用jackson從中加載它。

這是我目前要保存的內容:

public class Person {

    private String name;

    private int yearOfBirth;

    public Person(String name, int yearOfBirth) {
       this.name = name;
       this.yearOfBirth = yearOfBirth;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getYearOfBirth() {
        return yearOfBirth
    }

    public void setYearOfBirth(int yearOfBirth) {
       this.yearOfBirth = yearOfBirth;
    }

}

即使一個人的名字(在這種情況下)不能更改,也不能改變他們的出生年月,我還是必須讓傑克遜認識到這些值,否則它將產生一個例外:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "name"

初始化后,如何使我的字段名稱和yearOfBirth(而不使它們成為PUBLIC課程)最終字段不可編輯。

這是我使用傑克遜保存和加載的內容:

保存:

public void savePerson(File f, Person cache) {
    ObjectMapper saveMapper = new ObjectMapper()
                    .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
            saveMapper.setVisibilityChecker(
                saveMapper.getSerializationConfig().
                        getDefaultVisibilityChecker().
                        withFieldVisibility(JsonAutoDetect.Visibility.ANY).
                        withGetterVisibility(JsonAutoDetect.Visibility.NONE).
                        withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
            );
            ObjectWriter writer = saveMapper.writer().withDefaultPrettyPrinter();
            writer.writeValue(f, cache);
}

加載:

public Person load(File f) {

    return new ObjectMapper().readValue(f, Person.class);

}

用戶@JsonProperty,它將起作用。

import com.fasterxml.jackson.annotation.JsonProperty;

public class Person {

    private final String name;

    private final int yearOfBirth;

    public Person(@JsonProperty("name") String name, @JsonProperty("yearOfBirth") int yearOfBirth) {
        this.name = name;
        this.yearOfBirth = yearOfBirth;
    }

    public String getName() {
        return name;
    }

    public int getYearOfBirth() {
        return yearOfBirth;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM