我有一些代码可以从数据库中提取数据并填充 POJO。然后,该 POJO 被序列化并推送到 Elasticsearch 集群中。
我遇到的问题是数据库中的一个字段是自由文本,人们只是输入 a 来绕过必填字段。
我希望能够在推动弹性时去除该空白。
这是我的 pojo 的示例
public class Destination {
Long id;
...
...
String Address;
}
我正在使用 Jackson 使用 ObjectMapper 类将其转换为 JSON。 IE
mapper.convertTo(dest, Map.class)
当我查看弹性值时,我看到:
{"id":1, ..., "address": " "}
理想情况下,在这种情况下,我只是想看到“id”属性,因为“地址”本质上是空的。
我尝试过使用 ObjectMapper 的序列化属性,但似乎没有任何效果。是否有处理此问题的标准方法? Spring 如何处理这个问题?
我见过类似的问题(Jackson Json Serialization:删除空白字符串),但我不确定如何在全球范围内应用该解决方案,而不仅仅是在类级别,或者是否可以在全球范围内应用它。
本质上,您要求在 Jackson 序列化中跳过/省略具有
null
值的字段 - 无需挂钩 Jackson 的格式配置,这是一个不同的主题。
ObjectMapper 可以配置为跳过空值字段,如下所示:
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
// ...
ObjectMapper jackson = JsonMapper.builder()
.serializationInclusion(JsonInclude.Include.NON_NULL)
.build();
String json = jackson.writeValueAsString(object);
假设 POJO 或记录中唯一设置为非空的值是
id
,则结果字符串将为 {"id":1}
。