如何使Jackson在序列化对象时忽略get()方法

时间:2014-05-05 16:11:09

标签: java json serialization jackson

我在名为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

2 个答案:

答案 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)设置它。

点击参考以获取更多示例。

参考:Jackson: how to prevent field serialization