Я использую 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"
Как я могу сделать мои поля name и yearOfBirth (не делая их PUBLIC ofcourse) последними полями недоступными для редактирования после инициализации.
Это мое сохранение и загрузка с использованием Джексона:
сохранение:
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);
}