Xpages 如何从URL获取JSON

Xpages 如何从URL获取JSON,xpages,ssjs,Xpages,Ssjs,我需要使用函数SSJS fromJson()读取URL。 例如,Notes视图的数据访问API http://{host}/{database}/api/data/collections/name/{name} 我该怎么做 另外,我认为(我不知道这是不是真的)如果我使用Java代码 (例如,从这个博客作者,我 因为执行流读取的是我的服务器而不是当前用户,所以会丢失作者/读者功能吗 我会解释我为什么要理解这个… 我需要在我的应用程序中使用这个插件JQuery。 我需要一个完整的服务器端处理,因为我

我需要使用函数SSJS fromJson()读取URL。 例如,Notes视图的数据访问API

http://{host}/{database}/api/data/collections/name/{name}

我该怎么做

另外,我认为(我不知道这是不是真的)如果我使用Java代码 (例如,从这个博客作者,我 因为执行流读取的是我的服务器而不是当前用户,所以会丢失作者/读者功能吗

我会解释我为什么要理解这个…

我需要在我的应用程序中使用这个插件JQuery。 我需要一个完整的服务器端处理,因为我有超过10.000个文档用于任何视图。 这个jQueryPlugin将一个参数发送到一个指定的URL(我认为是我的XAgent),以便创建一个XAgent来读取这个参数并解析JSON API数据以获得输出。 这是因为我需要快速反应


它的解决方案非常慢,因为在JSON中加载我视图的所有条目(我有许多条目)我为这个操作等待了30/40秒

我从PS中收集到,您特别希望在服务器上从自身获取JSON,同时保留用户身份验证信息。Sven在那里的帖子有一点这样做,但我认为最可靠的方法是从请求和en在URL请求中传递它们。这为Java提供了很好的基础。您可以扩展它来做类似的事情(当然,我还没有测试过,但这是一个起点):

HttpServletRequest req=(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
字符串授权=req.getHeader(“授权”);
字符串cookie=req.getHeader(“cookie”);
URL myURL=新URL(“http://foo.com");
HttpURLConnection myURLConnection=(HttpURLConnection)myURL.openConnection();
if(StringUtil.isNotEmpty(授权)){
myURLConnection.setRequestProperty(“授权”,授权);
}
if(StringUtil.isNotEmpty(cookie)){
设置请求属性(“Cookie”,Cookie);
}
myURLConnection.setRequestMethod(“GET”);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);
myURLConnection.connect();
InputStream=null;
试一试{
is=myURLConnection.getInputStream();
字符串结果=StreamUtil.readString(is);
}最后{
StreamUtil.close(is);
myURLConnection.disconnect();
}
理想情况下,您还可以从请求中获取服务器主机名、协议和端口


Eric的评论也很明智:如果这是你可以用普通类做的事情,那么这将更加灵活,也不太容易出现问题,因为服务器自HTTP调用非常灵活。

我从PS中收集到,你特别希望在服务器上从自身获取JSON,同时保留用户身份验证信息。Sven的帖子有一点类似,但我认为最可靠的方法是从请求中获取授权和Cookie头,然后将它们传递到URL请求中。Java有很好的基础来实现这一点。您可以将其扩展为这样做(当然,我没有测试过,但这是一个起点):

HttpServletRequest req=(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
字符串授权=req.getHeader(“授权”);
字符串cookie=req.getHeader(“cookie”);
URL myURL=新URL(“http://foo.com");
HttpURLConnection myURLConnection=(HttpURLConnection)myURL.openConnection();
if(StringUtil.isNotEmpty(授权)){
myURLConnection.setRequestProperty(“授权”,授权);
}
if(StringUtil.isNotEmpty(cookie)){
设置请求属性(“Cookie”,Cookie);
}
myURLConnection.setRequestMethod(“GET”);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);
myURLConnection.connect();
InputStream=null;
试一试{
is=myURLConnection.getInputStream();
字符串结果=StreamUtil.readString(is);
}最后{
StreamUtil.close(is);
myURLConnection.disconnect();
}
理想情况下,您还可以从请求中获取服务器主机名、协议和端口


Eric的评论也很明智:如果这是普通类可以做的事情,那么由于服务器自HTTP调用的精细程度,这将更灵活,更不容易出现问题。

正如我在评论中提到的,这种方法迫使您的调用通过对Domino数据服务的客户端调用进行,否则会变得复杂通过跨NSF调用(例如-
var vwEnt:ViewEntryCollection=session.getDatabase(“serverName”、“path/myDb.NSF”).getView(“viewName”).getAllEntries();
)在视图(及其内容)上建立的普通句柄

正如我之前的一篇博文所概述的,你完全可以在Jesse的答案(诅咒你快速打字Jesse!)中实现这一点。我在工具的“抓取包”中包含了一个Java类,它是获取JSON格式内容的起点。以下是(以下是)和我通常从中开始的类:

package com.eric.awesome;
导入java.net.URL;
导入java.net.URLConnection;
导入java.io.BufferedReader;
导入com.google.gson.*;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.IOException;
导入java.net.MalformedURLException;
导入org.apache.commons.validator.routines.*;
/**
*使用单个公共静态方法初始化,以提供REST使用者
*它以JsonObject的形式返回数据。
* 
*@作者埃里克·麦考密克,@edm00se
* 
*/
公共类CustJsonConsumer{
/**
*用于接收针对RESTful URL数据源的HTTP JSON GET请求的方法。
* 
*@param myUrlStr REST端点的URL
*@return JsonObject包含来自RE的数据