[英]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.