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

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

https://stackoverflow.com/questions/23477002/

相关文章:

c# - 如何返回 JSON 对象

android - 对等通信选项

android - 如何从 JSONObject 中删除 nameValuePairs 键?

.net - 为什么 ServiceStack.Text 不默认日期为 iso8601?

json - 如何在 Play Framework 2.x 中实现嵌入式对象的隐式 Json 写入

java - Spring 3.0 使用 jackson 消息转换器做出 JSON 响应

python - 如何在scrapy中实现嵌套项?

json - 确保数组中的项目属性在 Json Schema 中是唯一的?

json - Jackson JsonTypeInfo.As.EXTERNAL_PROPERTY 无

json - 在 oracle 12c 中以 JSON 形式返回 sql 查询的结果