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"}
}