从Java发布到SharePoint 2013
我已尝试连接到SharePoint并将一些数据发布到列表中 用户可以与Web应用程序交互并发送一些信息。这些数据将被发送到运行在tomcat上的Java Web接口。Java代码应该连接到我们的SharePoint并在列表中发布数据。今天,我在网上读了很多教程和资源。。。他们中的大多数人都不赞成或讨论不同的情况!所以我的心在低语:“继续访问stackoverflow。”我在这里,问这个问题: 情况如上所述。我调用一个web界面vie JS(angularJS),并传递一个用户在前端输入的电子邮件地址。这里是:从Java发布到SharePoint 2013,java,rest,sharepoint,Java,Rest,Sharepoint,我已尝试连接到SharePoint并将一些数据发布到列表中 用户可以与Web应用程序交互并发送一些信息。这些数据将被发送到运行在tomcat上的Java Web接口。Java代码应该连接到我们的SharePoint并在列表中发布数据。今天,我在网上读了很多教程和资源。。。他们中的大多数人都不赞成或讨论不同的情况!所以我的心在低语:“继续访问stackoverflow。”我在这里,问这个问题: 情况如上所述。我调用一个web界面vie JS(angularJS),并传递一个用户在前端输入的电子邮件
@Path("webservice")
public class SetEmail {
@POST
@Path("/SetEmail")
@Consumes(MediaType.APPLICATION_JSON + ";charset=UTF-8")
@Produces("text/plain")
public String addItem(String incoming) throws ClientProtocolException, IOException, AuthenticationException{
String result = "error";
JSONObject jsonObj = new JSONObject(incoming);
String listName = "Leads";
String username = "...";
char[] password= new char[]{'...', '...', ...};
String website = "...";
现在,在我阅读了所有内容之后,我必须从SharePoint获取DigestValue,因为我想发出一个POST请求:
//Get the Digestvalue.
CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(AuthScope.ANY, new NTCredentials(username, password.toString(), "http://...", "https://..."));
HttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(provider).build();
HttpPost httpPost = new HttpPost(website + "_api/contextinfo");
httpPost.addHeader("Accept", "application/json;odata=verbose");
httpPost.addHeader("content-type", "application/json;odata=verbose");
httpPost.addHeader("X-ClientService-ClientTag", "SDK-JAVA");
HttpResponse response = client.execute(httpPost);
byte[] content = EntityUtils.toByteArray(response.getEntity());
String jsonString = new String(content, "UTF-8");
System.out.println(response);
JSONObject json = new JSONObject(jsonString);
String FormDigestValue = json.getJSONObject("d").getJSONObject("GetContextWebInformation").getString("FormDigestValue");
获取摘要后,我能够执行实际请求:
//POST the data.
CloseableHttpClient client2 = HttpClients.createDefault();
HttpPost httpPost2 = new HttpPost(website + "_api/web/lists/GetByTitle(" + listName + ")");
httpPost2.setEntity(new StringEntity("test post"));
NTCredentials creds = new NTCredentials(username, password.toString(), "http://...", "https://...");
httpPost2.addHeader(new BasicScheme().authenticate(creds, httpPost2, null));
httpPost2.addHeader("X-RequestDigest", FormDigestValue);
httpPost2.addHeader("Accept", "application/json;odata=verbose");
httpPost2.addHeader("Content-Type", "application/json;odata=verbose");
CloseableHttpResponse response2 = client2.execute(httpPost2);
System.out.println(response2);
client2.close();
}
}
我知道这不是最漂亮的代码,是的,我不是Java专家。我的问题是:
HttpResponseProxy{HTTP/1.1 401 Unauthorized [Server: Microsoft-IIS/8.0, SPR..
也许有人有耐心告诉我怎么做。谢谢。哇。。。你真的在尝试一些黑魔法;)-我建议您使用类似工具或其他REST工具的工具来运行HTTP POST/get,然后返回代码 我不知道您到底想实现什么,但通过powershell(如果您试图创建迁移脚本)或JavaScript(如果您在网站上)可能更容易实现
请注意,SharePoint online和SharePoint内部部署中的身份验证不同。。。这也可以由您的公司自定义(例如,您也可以实现基于表单的身份验证)。确保知道您的SharePoint正在使用什么。(或分享更多信息,以便我们能提供帮助)哇。。。你真的在尝试一些黑魔法;)-我建议您使用类似工具或其他REST工具的工具来运行HTTP POST/get,然后返回代码 我不知道您到底想实现什么,但通过powershell(如果您试图创建迁移脚本)或JavaScript(如果您在网站上)可能更容易实现
请注意,SharePoint online和SharePoint内部部署中的身份验证不同。。。这也可以由您的公司自定义(例如,您也可以实现基于表单的身份验证)。确保知道您的SharePoint正在使用什么。(或共享更多信息,以便我们提供帮助)认为此解决方案可能有点“过时”。)但是你可以在网上找到很多关于这个主题的教程。我会重新考虑,也许会尝试另一种解决方案。嘿,尼科,我找到了这条线索,也许它能帮助你走上正确的道路:谢谢。它解决了另一个问题,但可能是一个解决方案。:)虽然这个解决方案可能有点“过时”。)但是你可以在网上找到很多关于这个主题的教程。我会重新考虑,也许会尝试另一种解决方案。嘿,尼科,我找到了这条线索,也许它能帮助你走上正确的道路:谢谢。它解决了另一个问题,但可能是一个解决方案。:)