6

我们正在使用 JaxRS & Jackson 向我们的客户发送数据。由于客户端是 Javascript,如果该属性没有有效值(JaxRS 默认会这样做),我们实际上不需要发送空值或空数组。有没有解决的办法?

一个例子。JaxRS 发送这个:

{"prop1":[],"prop2":null,"prop3":"foo"}

我们本可以逃脱的

{"prop3":"foo"}

4

2 回答 2

7

有多种方法可以实现这一点,具体取决于;注释@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)是一种方式。或者,由于您还想删除空列表、数组,请将 NON_NULL 更改为 NON_EMPTY。

也可以将其配置为默认行为;在杰克逊 1.9 中:

mapper.setSerializationConfig(mapper.getSerializationConfig().withSerializationInclusion(
  JsonSerialize.Inclusion.NON_EMPTY));

在 Jackson 2.0 中,更简单一些:

mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY);
于 2012-04-25T21:18:59.520 回答
2

首先,从 JSON 中删除属性可能会导致客户端出现错误或代码不清晰 - 客户端必须在使用给定属性之前检查它是否存在,如果该属性丢失,则会报告 JavaScript 错误。无聊的东西。

由于 HTTP 通信是 gzip 压缩的,因此删除属性的潜在收益似乎并不显着(显然我可能是错的 - 我不知道您的应用程序)。GET 请求可以被有效地缓存,因此还有一个理由避免这种优化。

您可以根据需要自定义将 Java 对象序列化为 JSON。请参阅此问题如何将 JAXB 对象列表的序列化自定义为 JSON?进一步解释如何做到这一点。

于 2012-04-25T18:34:50.117 回答