Java 可以用Moxy将JSON对象映射到字符串吗?
假设我有一个数据模型,如:Java 可以用Moxy将JSON对象映射到字符串吗?,java,jaxb,jersey,moxy,Java,Jaxb,Jersey,Moxy,假设我有一个数据模型,如: public class MyModel { private String someString; private String someJson; // Data structure owned by client, persisted as a CLOB } 我通过RESTAPI(Jersey)向客户机提供模型。我知道我可以将其编组/解编组为: { "someStrong": "foo", "someJson": "{ someC
public class MyModel {
private String someString;
private String someJson; // Data structure owned by client, persisted as a CLOB
}
我通过RESTAPI(Jersey)向客户机提供模型。我知道我可以将其编组/解编组为:
{
"someStrong": "foo",
"someJson": "{ someClientThing: \"bar\", someOtherClientThing: \"baz\"}"
}
但我在找更干净的东西。有没有一种方法可以像这样将其封送/解封到JSON
{
someStrong: "foo",
someJson: {
someClientThing: "bar",
someOtherClientThing: "baz"
}
}
我不希望服务器必须知道someJson
的数据模型,因为它属于客户端。我只想让服务器处理它的持久性,这样服务器就可以在客户端和数据库之间来回传递它
注意:它不需要直接映射到字符串-只要它可以映射到非结构化(服务器上没有静态定义)的对象,这些对象可以在持久化之前进行字符串化(并在检索时重新进行非结构化)。上述解决方案很简单。 而不是制作数据类型字符串的JSON。 您可以使用用户定义的数据类型,该数据类型中包含数据成员
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
}
上述解决方案将对您有所帮助。像这样试试,也许可以帮助您
public class MyModel {
private String someString;
private Map<String, Object> someJson;
}
公共类MyModel{
私有字符串someString;
私有映射;
}
如果json没有数组,这是可能的,如您的示例所示:
{“someClientThing”:“bar”,“someOtherClientThing”:“baz”}
对于这种简单的情况,解决方案是在自己的DomHandler中实现双向转换json字符串org.w3c.dom.Document
实例。
将处理程序附加到字段:
享受
不幸的是,由于XMLDOM不支持它们的数组,因此数组有一个很大的麻烦。在json下重新转换后
你会得到这样的结果
谢谢,我知道我可以将它映射到一个静态定义的类,但是我需要客户端拥有
SomeJson
的结构-服务器不必维护它的模型,客户端应该能够在其中放入它想要的任何有效的JSON。你能使用base64吗?您可以将其直接存储在BBDD中,客户端只需在发送请求之前进行编码,在解析响应之前进行解码,这在大多数编程语言中都是微不足道的。您的服务器变量将是byte[]someJson
,JAXB将进行编码/解码,这对更复杂的结构不起作用,是吗?我应该让我的例子更复杂,但它应该是一个任意复杂的结构-对象与对象的数组,对象与数组,等等
@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
}
{ "someClientThing": "bar", "someOtherClientThing": ["baz1","baz2"]}
{
"someClientThing": "bar",
"someOtherClientThing": {value="baz1"},
"someOtherClientThing": {value="baz2"}
}