为了账号安全,请及时绑定邮箱和手机立即绑定

Lightcouch 如何检查设计文档是否存在?

Lightcouch 如何检查设计文档是否存在?

温温酱 2023-06-08 21:01:39
因此,我正在尝试使用 contains 检查我的数据库中是否存在设计文档。if (!dbClient.contains("_design/myDesignDoc")) {//Do stuff}但是我得到一个 java.lang.IllegalArgumentException: Entity may not be null 错误,因为 id 中有 _design 的下划线。java.lang.IllegalArgumentException: Entity may not be null    at org.apache.http.util.Args.notNull(Args.java:54) ~[httpcore-4.4.11.jar:4.4.11]    at org.apache.http.util.EntityUtils.toString(EntityUtils.java:307) ~[httpcore-4.4.11.jar:4.4.11]    at org.lightcouch.CouchDbClientBase.validate(CouchDbClientBase.java:659) ~[lightcouch-0.2.0.jar:na]    at org.lightcouch.CouchDbClient$3.process(CouchDbClient.java:223) ~[lightcouch-0.2.0.jar:na]    at org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:142) ~[httpcore-4.4.11.jar:4.4.11]    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:191) ~[httpclient-4.5.9.jar:4.5.9]    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.9.jar:4.5.9]    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.9.jar:4.5.9]    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.9.jar:4.5.9]    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) ~[httpclient-4.5.9.jar:4.5.9]    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.9.jar:4.5.9]    at org.lightcouch.CouchDbClientBase.executeRequest(CouchDbClientBase.java:480) ~[lightcouch-0.2.0.jar:na]    at org.lightcouch.CouchDbClientBase.head(CouchDbClientBase.java:566) ~[lightcouch-0.2.0.jar:na]我曾经能够做到这一点,但我根本不记得我做了什么。如何查看设计文档是否存在?
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

也许我的建议非常明显,GET 或 HEAD 应该在检索时回答 HTTP 状态代码:

curl -X HEAD 'http://localhost:5984/your_db/_design/your_design_doc'

只需要弄清楚哪个 LightCouch API 方法将执行类似的调用。


查看完整回答
反对 回复 2023-06-08
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

好的,虽然我找不到用于 HEAD 的 LightCouch API,但我最终做的是使用这个


JsonObject result = null;

String uri = dbClient.getDBUri() + "_design/myDesignDoc";


 try {

            result = dbClient.findAny(JsonObject.class, uri);

        } catch (Exception e) {

            throw new CustomException("Design document could not be found");

        } finally {

            if (result == null) {

                file = new ClassPathResource("json/designDocData.json").getFile();

                reader = new JsonReader(new FileReader(file));

                data = gson.fromJson(reader, JsonObject.class);


                dbClient.save(data);

            }

dbClient.findAny 似乎能够检索 .contains 和 .find 失败的设计文档。我希望我不必检索文档来查看它是否存在并且可以只使用包含,但这是我现在唯一的工作方法


查看完整回答
反对 回复 2023-06-08
  • 2 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信