我在一个名为 Project
的类中有这段代码:
@Transient
public List<Release> getAllReleases() {
List<Release> releases = new ArrayList<Release>();
...
return releases;
}
当一个项目对象被序列化时,getAllReleases()
方法被调用,并且一个allReleases
字段被添加到被序列化的对象中。
如果我在方法之前添加 @JsonIgnore
我会得到相同的结果。所以我想知道如何实现在序列化对象时被 jackson 忽略的 getFoo()
方法。
或者我可以这样做:
static public List<Release> getAllReleases(Project proj) {
List<Release> releases = new ArrayList<Release>();
...
return releases;
}
但解决方案看起来有点难看,我很确定 jackson 提供了一些更简单的机制。
我错过了什么吗? TIA
最佳答案
如果您使用 @JsonIgnore
注释标记 getter 方法,则不应对其进行序列化。这是一个例子:
public class JacksonIgnore {
public static class Release {
public final String version;
public Release(String version) {
this.version = version;
}
}
public static class Project {
public final String name;
public Project(String name) {
this.name = name;
}
@JsonIgnore
public List<Release> getAllReleases() {
return Arrays.asList(new Release("r1"), new Release("r2"));
}
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new Project("test")));
}
}
输出:
{
"name" : "test"
}
关于java - 序列化对象时如何让 jackson 忽略 get() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23477002/