java - 是否可以使用 Moxy 将 JSON 对象映射到字符串?

标签 java jaxb jersey moxy

假设我有一个像这样的数据模型:

public class MyModel {
    private String someString;
    private String someJson; // Data structure owned by client, persisted as a CLOB
}

我通过 REST API( Jersey )为客户提供模型。我知道我可以将其编码/解码为类似的东西:

{
    "someStrong": "foo",
    "someJson": "{ someClientThing: \"bar\", someOtherClientThing: \"baz\"}"
}

但我正在寻找更清洁的东西。有没有一种方法可以像这样将其编码/解码为 JSON?

{
    someStrong: "foo",
    someJson: {
        someClientThing: "bar",
        someOtherClientThing: "baz"
    }
}

我不希望服务器必须知道 someJson 的数据模型,因为它归客户端所有。我只希望服务器处理它的持久性 - 所以服务器会在客户端和数据库之间来回传递它。

注意:它不需要直接映射到一个字符串——只要它可以映射到一些非结构化的(不是在服务器上静态定义的)可以在持久化之前进行字符串化(和非字符串化)返回到检索时的非结构化对象)。

最佳答案

如果 json 没有数组是可能的,如您的示例所示:

{ "someClientThing": "bar", "someOtherClientThing": "baz"}

对于这种简单的情况,解决方案是在自己的 DomHandler 中实现双向转换 json-string<->org.w3c.dom.Document 实例。 将处理程序附加到字段:

@XmlRootElement
@XmlAccessorType(FIELD)
    public class MyModel {
    private String someString;
    @XmlAnyElement(value = SomeJsonHandler.class)
    private String someJson; // Data structure owned by client, persisted as a CLOB
}

享受吧。

不幸的是,数组存在一个很大的问题,因为 XML Dom 不支持它们。在json下方重新转换后

{ "someClientThing": "bar", "someOtherClientThing": ["baz1","baz2"]}

你会得到这样的东西

{
   "someClientThing": "bar",
   "someOtherClientThing": {value="baz1"},
   "someOtherClientThing": {value="baz2"}
}

关于java - 是否可以使用 Moxy 将 JSON 对象映射到字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37955607/

相关文章:

java - 对于预期值使用的正确断言是什么?

java - 当集合为空时省略 JAXB 中的包装器标记

java - 使用 jaxb 解析 xml 中的嵌套元素

java - jaxb、xsd 替换复杂类型

jersey - Jersey 2.x (2.6) 所需的 Maven 依赖项

java - 带有 CDI Weld 4 而非 HK2 的 Jersey 3

Java - 访问 Tomcat/Jersey url 给出 404 Not Found

java - 安卓 : Record audio app crash

java - 用Java读取媒体文件的APIC图像数据

java - intellij - spring-boot 未被识别(未映射的 Spring-boot 注释配置类)