我在名为Project
的类中使用此代码:
@Transient
public List<Release> getAllReleases() {
List<Release> releases = new ArrayList<Release>();
...
return releases;
}
当序列化项目对象时,将调用getAllReleases()
方法,并将allReleases
字段添加到序列化对象。
如果我在方法之前添加@JsonIgnore
,我会得到相同的结果。所以我想知道如何实现一个getFoo()
方法,当序列化对象时,Jackson会忽略该方法。
或者我可以这样做:
static public List<Release> getAllReleases(Project proj) {
List<Release> releases = new ArrayList<Release>();
...
return releases;
}
但解决方案看起来有点难看,我很确定杰克逊必须提供一些更简单的机制。
我错过了什么吗? TIA
答案 0 :(得分:34)
如果使用@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"
}
答案 1 :(得分:-4)
你需要实现一个什么都不做的JSon序列化程序,然后使用@JSonSerialize(使用= EmptySerializer.class)设置它。
点击参考以获取更多示例。