我需要用函数SSJS from mJson()读一个URL。例如Notes View的数据访问API
http://{host}/{database}/api/data/collections/name/{name}
我该怎么做?
P. S我认为(我不知道是否是真的),如果我使用Java代码(例如类URLReader从这个博客,我失去作者/读者的功能,因为是我的服务器,而不是当前用户执行读取流?
我会解释为什么我要理解这个。。。
我需要使用这个插件JQuery JQuery数据表在我的应用程序。我需要一个完整的服务器端处理,因为我有超过10.000文档的任何视图。这个jQueryPlugin将一个参数发送到一个特定的URL(我认为是我的XAgent),这样我就可以创建一个XAgent来读取这个参数并解析输出的JSON API数据。这是因为我需要一个快速的反应。
Oliver Busse的解决方案速度非常慢,因为在JSON中加载我视图的所有条目(我有许多条目),然后等待30/40秒进行此操作
正如我在评论中提到的,这种方法强制您的调用通过对Domino数据服务的客户端调用进行,并通过跨NSF调用(例如-var vwEnt:ViewEntryCollection=session.getDatabase(“serverName”,“path/myDb.NSF”).getView(“viewName”)在视图(及其内容)上建立一个普通句柄,从而使之复杂化.getAllEntries();
)。
正如我之前的一篇博文所概述的,你完全可以用杰西的答案来实现这一点(诅咒你,快打字的杰西!)轮廓。我在工具的“抓取包”中包括一个Java类,它是获取JSON格式内容的起点。这是链接(这是一个在请求头中具有基本授权的链接)和类I通常从以下位置开始:
package com.eric.awesome;
import java.net.URL;
import java.net.URLConnection;
import java.io.BufferedReader;
import com.google.gson.*;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.MalformedURLException;
import org.apache.commons.validator.routines.*;
/**
* Class with a single, public, static method to provide a REST consumer
* which returns data as a JsonObject.
*
* @author Eric McCormick, @edm00se
*
*/
public class CustJsonConsumer {
/**
* Method for receiving HTTP JSON GET request against a RESTful URL data source.
*
* @param myUrlStr the URL of the REST endpoint
* @return JsonObject containing the data from the REST response.
* @throws IOException
* @throws MalformedURLException
* @throws ParseException
*/
public static JsonObject GetMyRestData( String myUrlStr ) throws IOException, MalformedURLException {
JsonObject myRestData = new JsonObject();
try{
UrlValidator defaultValidator = new UrlValidator();
if(defaultValidator.isValid(myUrlStr)){
URL myUrl = new URL(myUrlStr);
URLConnection urlCon = myUrl.openConnection();
urlCon.setConnectTimeout(5000);
InputStream is = urlCon.getInputStream();
InputStreamReader isR = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isR);
StringBuffer buffer = new StringBuffer();
String line = "";
while( (line = reader.readLine()) != null ){
buffer.append(line);
}
reader.close();
JsonParser parser = new JsonParser();
myRestData = (JsonObject) parser.parse(buffer.toString());
return myRestData;
}else{
myRestData.addProperty("error", "URL failed validation by Apache Commmons URL Validator");
return myRestData;
}
}catch( MalformedURLException e ){
e.printStackTrace();
myRestData.addProperty("error", e.toString());
return myRestData;
}catch( IOException e ){
e.printStackTrace();
myRestData.addProperty("error", e.toString());
return myRestData;
}
}
}
要作为POJO从SSJS调用,您需要执行以下操作:
js prettyprint-override">importPackage(com.eric.awesome);
var urlStr = "http://{host}/{database}/api/data/collections/name/{name}";
var myStuff:JsonObject = CustJsonConsumer.GetMyRestData(urlStr);
我从PS得知,您特别希望在服务器上从自身获取JSON,同时保留用户身份验证信息。Sven在那里的帖子有点类似,但我认为最可靠的方法是从请求中获取授权和Cookie头,然后在URL请求中传递它们。这个答案为用Java实现这一点提供了很好的基础。您可以扩展它来做类似的事情(当然,我还没有测试过,但这是一个起点):
HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String authorization = req.getHeader("Authorization");
String cookie = req.getHeader("Cookie");
URL myURL = new URL("http://foo.com");
HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();
if(StringUtil.isNotEmpty(authorization)) {
myURLConnection.setRequestProperty("Authorization", authorization);
}
if(StringUtil.isNotEmpty(cookie)) {
myURLConnection.setRequestProperty("Cookie", cookie);
}
myURLConnection.setRequestMethod("GET");
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);
myURLConnection.connect();
InputStream is = null;
try {
is = myURLConnection.getInputStream();
String result = StreamUtil.readString(is);
} finally {
StreamUtil.close(is);
myURLConnection.disconnect();
}
理想情况下,您还可以从请求中获取服务器主机名、协议和端口。
Eric的评论也很明智:如果这是可以用普通类实现的,那么这将更加灵活,并且不太容易出现问题,因为服务器自HTTP调用可以是多么灵活。
你好,我来自从URL获取JSON对象 我试着去买一顶帽子- 有人能告诉我我做错了什么吗?
问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 我想从URL获取值,以按ID从数据库中选择数据。我想要ID值。 例如,如果我打开数据库, 我想获取id = 12的值。 如果我打开,则 获取数据库中id = 7的值,依此类推。 我有一些代码: 问题答案: 网址: 码:
问题内容: 此URL返回JSON: 我尝试了一下,但没有成功: 如何从该URL的JSON响应中获取JavaScript对象? 问题答案: 您可以使用jQuery 函数:
问题内容: 我正在尝试获取Firebase存储桶中文件的“长期持久下载链接”。我已将其权限更改为 我的javacode看起来像这样: 当我运行它时,我得到的uri链接看起来像 com.google.android.gms.tasks.zzh@xxx 问题1.我是否可以从中获得类似于以下内容的下载链接:https : //firebasestorage.googleapis.com/v0/b/pro
问题内容: 尝试在SafariViewController中使用Facebook OAuth。首先,我使用SafariViewController打开authURL,如果用户在Safari上登录Facebook,它将重定向它们并返回带有该特定服务令牌的OAuth URL,例如Instagram 响应:https : //www.facebook.com/connect/login_success.
问题内容: 我想从JavaScript的YouTube网址中获取(没有jQuery,纯JavaScript)。 YouTube URL格式示例 或网址中包含视频ID的任何其他YouTube格式。 这些格式的结果 问题答案: 您不需要为此使用正则表达式。