Java 使用MarkLogic的Spring数据抽象在MarkLogic中保存JSON Obj时出错
我正在从生产者应用程序接收一个JSON,当我试图将其转换为JSON对象并将其保存到MarkLogic中作为Java 使用MarkLogic的Spring数据抽象在MarkLogic中保存JSON Obj时出错,java,json,apache-kafka,spring-data,marklogic,Java,Json,Apache Kafka,Spring Data,Marklogic,我正在从生产者应用程序接收一个JSON,当我试图将其转换为JSON对象并将其保存到MarkLogic中作为.JSON。我没有POJO来为传入的未知数据提供一个字段来用@Id对其进行注释。我得到了下面的错误 @Autowired MarkLogicOperations ops; @StreamListener(MultiInputSink.INPUT) public synchronized void handle(String ConsumerContents) {
.JSON
。我没有POJO来为传入的未知数据提供一个字段来用@Id对其进行注释。我得到了下面的错误
@Autowired
MarkLogicOperations ops;
@StreamListener(MultiInputSink.INPUT)
public synchronized void handle(String ConsumerContents) {
JSONObject jsobObj = new JSONObject(consumerContents);
ops.write(jsobObj, "Consumer");
logger.info("Consumer Data "+jsobObj.toString());
}
以下是错误:-
nested exception is java.lang.illegalArgumentException: your entity of type org.json.JSONObject does not have a method or field annotated with field org.springframework.data.annotated.id
我需要保存JSON。有办法解决这个问题吗?多谢各位
注意:-我将此用于MarkLogic的Spring数据抽象新MarkLogic开发人员的一个常见问题是在“低级”接口更合适时使用高级接口。 在本例中,SpringAPI公开了基于spring实体的操作——如果您一开始就有spring实体,那么它可以正常工作,但是您没有。您有“纯json”——也就是“文本”。在这种情况下,您不希望仅为了将它们存储在MarkLogic中而将它们转换为实体——有时尝试单步执行某个高级API——将字符串JSON转换为实体然后再转换回字符串以发送到ML所涉及的工作量是Mindbogeling。不仅是wrt性能,还包括数据保真度。Java到JSON不是1:1无损或明确的。如果您从一个实体开始,那么API是有意义的,但是您不想将真正的JSON转换为一个实体,只是为了将其写出来 而是寻找其他API之一。例如,executeWithClient将允许您访问下一个“较低”的API。 从那里,您可以将JSON写为JSON(文本),而无需太多麻烦。 使用DatabaseClient接口,您仍然需要选择一系列抽象——所有这些都需要您将完美的JSON文本转换为某种形式的对象,以便API可以将其转换回文本 对于DocumentManager(DatabaseClient的一部分),您需要一个WriteHandle——StringWriteHandle应该适用于此 一种更直接(更有效)的方法是通过xquery exec执行文档插入。该项目有一些例子: 一个例子:(kotlin来源) 如果性能对这个应用程序很重要,我建议尝试不同的方法。性能可能会发生巨大的变化(100倍或更多),API和方法的选择似乎略有不同。上面的示例来自一个小程序,该程序使用不同的API写出大量的小JSON文件。在代码量大致相同的情况下,性能可以从每秒5个文档到每秒2000个文档不等
val repo = client.newServerEval()
repo.addVariable("url", getURI("evalstring", id))
repo.addVariable("content", (str))
repo.xquery(
"declare variable \$url as xs:string external ;"+
"declare variable ${'$'}content external ;"+
"xdmp:document-insert( \$url , xdmp:unquote( \$content ) )"
)
repo.eval().forEach {
println(it.string)
}