java - 序列化对象时如何让 jackson 忽略 get() 方法

标签 java json serialization jackson

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

相关文章:

json - 将 JSON 字符串转换为 Perl/Moose 对象

java - java中Exec方法从未抛出异常

java - Java中如何将一维数组转换为二维数组

c# - Json.NET 是否缓存类型的序列化信息?

json - json.getString() 函数返回一个格式奇怪的字符串,因此无法将其与看似相同值的字符串进行比较

python - Python 文字的安全读取

java - ObservableList 不复制

JAVA:框架大小和图形对象居中

c# - 解析 JSON 对象数组

c# - 在执行响应的 XML 序列化时修改默认命名空间前缀