使用 Jackson 序列化 vertx JsonObject

Serialize vertx JsonObject using Jackson

我在开发中使用 vertxJackson。在我的一个 classes 中,我得到了一个类型为 JsonObject 的字段,类似这样:

class User
  private String name;
  private JsonObject details;

详细信息 字段可以包含其他 JsonObject 或 JsonArray,例如: {"details": [{"street": "Broadway"}, {"building": 20}]}
我没有这个结构的专用class,因为没有固定的结构,它可以变化。
详细信息 对象的创建方式如下:

JsonObject details = new JsonObject().put("name", "value").put("another", "another")

这种方法允许我在我的代码中存储任何结构的细节。至于我不需要在我的后端操作这些数据,我不想为它创建一个特殊的结构。
一切正常,直到我尝试使用 Jackson 序列化此 JsonObject。不幸的是,杰克逊没有给我漂亮的 JSON 字符串,而是给了我 map 序列化了所有地图附加字段的对象。

如何使用 Jackson 序列化 vertxJsonObject

正在查看 JsonObject's javadoc , I saw a getMap() 方法。我知道 Jackson 能够轻松地序列化地图。

最后,vertx 已经有了它自己的 Serializer 实现。 只用他们的 class 来执行连载就够了(这将使用 Jackson undercover)。

JsonObject user = new JsonObject(Json.encode(new User());

而且效果很好。

我建议像这样使用 https://static.javadoc.io/com.fasterxml.jackson.core/jackson-databind/2.7.3/com/fasterxml/jackson/databind/ObjectMapper.html#convertValue(java.lang.Object,%20java.lang.Class) 创建: new JsonObject((Map)Json.mapper.convertValue(new User(), Map.class)); 来回转换 String 需要时间。