Java DataIntegrityViolationException:无法使用spring mongodb存储JSON架构

Java DataIntegrityViolationException:无法使用spring mongodb存储JSON架构,java,spring,mongodb,spring-data,spring-data-mongodb,Java,Spring,Mongodb,Spring Data,Spring Data Mongodb,我有一个JSON模式,如下所示,我通过websocket发送到我的后端 { "type": "object", "properties": { "user": { "$ref": "#/definitions/user" } }, "required": [ "user" ] } 为此,我的bean类定义为 class Schema{ private String type;

我有一个JSON模式,如下所示,我通过websocket发送到我的后端

{
    "type": "object",
    "properties": {
        "user": {
            "$ref": "#/definitions/user"
        }
    },
    "required": [
        "user"
    ]
}
为此,我的bean类定义为

class Schema{
    private String type;
    private String[] required;
    Private Map<String, Object> properties;
    //getter and setter
}
我猜$ref不是mongodb中使用的有效密钥名,但它是基于开放API规范的JSON模式的有效密钥,我想按原样删除它。 有什么解决方案吗?

根据mongodb JIRA,您不能保存包含
或以
$
开头的密钥。因此,我认为这里唯一的解决方案是在将对象存储到
mondogb
之前手动转义
$
,并在检索时删除
\


您可以在处理这些对象的存储/检索的层中编写此逻辑。

当我通过websocket发送数据并将其作为字符串传输时,我将使用一些字符串(例如
\\\\\\\\\\\\\\\\\\\\\\\\\\\
)替换
$ref
,该字符串是mongodb的有效密钥名

strData = strData.replace(new RegExp('"\\$ref":', 'g'), '"##ref##":');
self.stomp.send('/app/execute', {}, strData);
当我从后端收到它时,我再次用
$ref
替换
##ref

body = body.replace(new RegExp('"##ref##":', 'g'), '"$ref":');
body = body.replace(new RegExp('"##ref##":', 'g'), '"$ref":');