【发布时间】:2019-03-01 20:53:08
【问题描述】:
我正在使用 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;
}
}
即使一个人的名字(在这种情况下)不能更改,他们的出生年份也不能更改,我必须让 Jackson 的 getter 和 setter 识别这些值,否则会出现异常:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "name"
如何使我的字段名称和 yearOfBirth(当然不让它们成为公共)最终字段在初始化后不可编辑。
这是我使用jackson保存和加载的:
保存:
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);
}
【问题讨论】:
-
你能把你想要转换成 POJO 的 json 贴出来
标签: java json performance jackson save