Java DataIntegrityViolationException:无法使用spring mongodb存储JSON架构
我有一个JSON模式,如下所示,我通过websocket发送到我的后端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;
{
"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":');