假设我有一个像这样的数据模型:
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/