gpt4 book ai didi

java - 同一类的不同 JSON 序列化

转载 作者:搜寻专家 更新时间:2023-11-01 03:01:06 26 4
gpt4 key购买 nike

常见的问题:我想以两种不同的方式序列化一个类。在一种情况下,我想包含 getItems() 方法的输出,而在另一种情况下,我不想在输出中看到它。

选择使用 Jackson Views 是因为它给我最大的灵 active 。创建时间:

public class Views {
public static class WithOrderItems {
}
}

然后在要序列化的类中:

@JsonView(Views.WithOrderItems.class)
public Iterable<OrderItem> getItems() {
//Code...
}

在进行序列化的方法中:

// Expectation: this *should not* include "items" in JSON output
mapper.writeValueAsString(retObj)

返回相同的:

// Expectation: this should include "items" in JSON output
mapper.writerWithView(Views.WithOrderItems.class).writeValueAsString(retObj)

在这两种情况下,整个对象都被序列化(就好像 View 被忽略了一样)。为什么会这样?

我可以在网上找到的大部分文档、教程等都是针对旧版本的 Jackson。有没有我错过的设置?据我所知,用 View 注释的方法不应包含在默认映射器中。

我的 mapper 配置是:

public static ObjectMapper mapper = new ObjectMapper().registerModule(new GuavaModule())
.registerModule(MoneySerializer.getAsModule());

static {
mapper.setSerializationInclusion(Include.NON_ABSENT);
}

(getAsModule() 是临时代码。MoneySerializer 用于 Joda Money 对象,在这种情况下不会被调用。)

希望避免混入,因为这意味着输出和不输出的静态配置。

使用:

  • jackson :2.6.1
  • Java 7
  • GAE SDK 1.9.30
  • 客观化 5.1.7

最佳答案

澄清和扩展@ghokun 的回答...

因此,要排除 “items”(或更一般地,分配有特殊 View 的字段/方法),请使用:

mapper.writerWithView(Object.class)

包含 “项目”(或更一般地说,分配给它们的Views.WithOrderItems View 的字段/方法),使用:

mapper.writerWithView(Views.WithOrderItems.class)

仅使用普通的 mapper(即,不使用从 mapper.writerWithView(...) 获取的 ObjectWriter)将包含所有内容。

关于java - 同一类的不同 JSON 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34216661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com