【问题标题】:Jackson: How to unmarshal a property with JSON content as raw String杰克逊:如何将具有 JSON 内容的属性解组为原始字符串
【发布时间】:2016-12-30 16:49:41
【问题描述】:

我正在将一个对象编组为 JSON,该 JSON 在 String 属性中具有 JSON (String actionsJSON)。这导致 JSON 被转义,所以我使用 Jackson 注释 @JsonRawValue 来获取该属性中的 JSON 不会被转义。问题是,当我将其解组回字符串属性(反向过程)时,Jackson 处理 JSON(具有 JSON 数组)并抛出错误,因为 java 类属性只是一个字符串:

Can not deserialize instance of java.lang.String out of START_ARRAY token

我怎样才能让 Jackson 只复制该属性的内容而不尝试处理它,以便我在 String 属性中拥有 JSON 代码,就像在原始对象中一样?

(我在目标类中尝试过@JsonRawValue,...@JsonSerialize(using = ToStringSerializer.class, as = StringSerializer.class) 但错误仍然存​​在。

【问题讨论】:

  • 你生成actionsJSON的内容吗?有没有机会将其保留为 Object 并让 Jackson 对其进行序列化?
  • 我手动将它生成到字符串中,因为动态内容与 Java 属性无关,这就是为什么我需要 @JsonRawValue 以便杰克逊在编组时不会将其重新转换为 JSON 两次(转义它)。问题并不是真正的序列化,而是当我将其反序列化回 String 属性时。
  • @icordoba 问题是@JsonRawValue 仅用于序列化,而不是反序列化。使用 Object 而不是 String 并让 Jackson 序列化(和反序列化)可以解决问题。
  • 我的问题大概和这个一样:stackoverflow.com/questions/27911591/…

标签: json jackson marshalling


【解决方案1】:

您应该查看 JsonDeserlalize 而不是 JsonSerialize。 Deserialize JSON to string in raw format using Jackson 的一个很好的例子 更多详细信息请访问http://www.baeldung.com/jackson-annotations

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-12
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多