假设我有一个数据模型,如:
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\"}"
}
但我正在寻找更清洁的东西。有没有一种方法可以像JCC那样整理/解组JSON?
{
someStrong: "foo",
someJson: {
someClientThing: "bar",
someOtherClientThing: "baz"
}
}
我不希望服务器必须知道someJson
的数据模型,因为它由客户端拥有。我只是希望服务器处理它的持久性 - 所以服务器会在客户端和数据库之间来回传递它。
注意:它不需要直接映射到字符串 - 只要它可以映射到非结构化的(在服务器上没有静态定义),可以在持久化之前进行字符串化(并且在检索时将其解析为非结构化对象。
答案 0 :(得分:2)
如果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"}
}
答案 1 :(得分:1)
试试这样,也许可以帮到你
public class MyModel {
private String someString;
private Map<String, Object> someJson;
}
答案 2 :(得分:-1)
上述解决方案很简单。 而不是使someJson的数据类型为String。 您可以使用包含其中数据成员的用户定义数据类型。
public class MyModel {
private String someString;
private SomeJson someJson;
}
public class SomeJson {
private String someClientThing;
private String someOtherClientThing; // Data structure owned by client, persisted as a CLOB
}
以上解决方案将为您提供帮助。