73、salesforce通过JAVA来Call在salesforce中已经写好的Restful处理接口
来源:互联网 发布:微博个性域名是什么 编辑:程序博客网 时间:2024/06/08 07:43
/** *使用salesforce通过REST方式作为webservice,需要以下几点 *1、类和方法需要global,方法需要静态 *2、类需要通过RestResource(UrlMapping='/page/*')注解声明 *3、@HttpGet和@HttpDelete不能有形参,可以通过URL?param或者URL/param方式传过来参数**/@RestResource(UrlMapping='/Merchandise/*')global class MerchandiseRESTController { global static final Integer PAGE_SIZE = 20; public static string merchandiseName {get;set;} public static string merchandiseId {get;set;} @HttpGet global static List<Merchandise__c> getMerchandiseByName(){ RestRequest request = RestContext.request; //grab the merchandise Id from the end of the URL String currentPage = request.params.get('currentPage')!=null?request.params.get('currentPage'):'0'; Integer offsetNumber = Integer.valueOf(currentPage) * PAGE_SIZE; merchandiseName = request.params.get('name'); String fetchSql; if(merchandiseName!=null){ fetchSql = 'SELECT Quantity__c,Price__c,Name from Merchandise__c where Name=:merchandiseName'; }else{ fetchSql = 'SELECT Quantity__c,Price__c,Name from Merchandise__c limit:PAGE_SIZE offset:offsetNumber '; } List<Merchandise__c> merchandiseList = Database.query(fetchSql); return merchandiseList; } @HttpPost global static Id insertMerchandise(String name,String price,String quantity){ System.debug('----------merchandise name---------'+name); Merchandise__c merchandise = new Merchandise__c(); if(price!=null && price.isNumeric()){ merchandise.Price__c = Decimal.valueOf(price); } if(quantity!=null && quantity.isNumeric()){ merchandise.Quantity__c =Decimal.valueOf(quantity); } merchandise.Name = name; insert merchandise; return merchandise.Id; } @HttpDelete global static void deleteMerchandise(){ RestRequest request = RestContext.request; merchandiseName = request.requestURI.substring(request.requestURI.lastIndexOf('/')+1); String querySql = 'select Id from Merchandise__c where Name =:merchandiseName'; List<Merchandise__c> merchandiseList = Database.query(querySql); if(merchandiseList!=null){ delete merchandiseList; } } @HttpPut global static Id upsertMerchandise(String name,String price,String quantity){ Merchandise__c merchandise = new Merchandise__c(); merchandise.Name = name; if(price!=null && price.isNumeric()){ merchandise.Price__c = Decimal.valueOf(price); } if(quantity!=null && quantity.isNumeric()){ merchandise.Quantity__c =Decimal.valueOf(quantity); } upsert merchandise; return merchandise.Id; } /**@HttpPatch global static Id updateMerchandise(){ RestRequest request = RestContext.request; merchandiseName = request.requestURI.substring( request.requestURI.lastIndexOf('/')+1); String querySql = 'select Id from Merchandise__c where Name =:merchandiseName'; List<Merchandise__c> merchandiseList = Database.query(querySql); // Deserialize the JSON string into name-value pairs Map<String, Object> params = (Map<String, Object>)JSON.deserializeUntyped(request.requestbody.tostring()); // Iterate through each parameter field and value }**/ }
上边是salesforce中的接口实现,通过restful方式来处理http请求
下边则是JAVA中调用上边salesforce中已经处理好的restful的http接口
package com.test.salesforce.restful;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.apache.http.Header;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.ParseException;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpDelete;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.message.BasicHeader;import org.apache.http.params.DefaultedHttpParams;import org.apache.http.params.HttpParams;import org.apache.http.util.EntityUtils;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONTokener;public class TestSalesforceRestful { static final String USERNAME = "weizhen.zhao@pactera.com"; static final String PASSWORD = "zwz87865918vYoQKmkHZ3CHvlWxktmXybWi"; static final String LOGINURL = "https://login.salesforce.com"; static final String GRANTSERVIVE = "/services/oauth2/token?grant_type=password"; static final String CLIENTID = "3MVG9YDQS5WtC11rl9X0l.9UJjmHTftDEUlhQz8SsxqKUk5iRxSgSp2aeKxM1NHJBkzp.VJqIT56XXPnLk5oi"; static final String CLIENTSECRET = "9102086465628528777"; private static String REST_ENDPOINT = "/services/apexrest"; private static String baseUri; private static Header oauthHeader; private static Header prettyPrintHeader = new BasicHeader("X-PrettyPrint", "1"); public static void main(String[] args) { // 测试restful 创建一个merchandise // createMerchandise("testSalesforceRestfulApi", "2000", "20001"); // 测试restful 查询一个List结果集 /*List<Merchandise> list = getMerchandiseByName("testSalesforceRestfulApi"); for (Merchandise item : list) { System.out.print(item.getName() + "\t"); System.out.print(item.getPrice() + "\t"); System.out.println(item.getQuantity() + "\t"); }*/ //删除一个Merchandise //deleteMerchandise("testSalesforceRestfulApi"); } public static void deleteMerchandise(String name) { if (isAccessable()) { HttpClient client = HttpClientBuilder.create().build(); String url = baseUri + "/deleteMerchandise/" + name; HttpDelete delete = new HttpDelete(url); delete.addHeader(oauthHeader); delete.addHeader(prettyPrintHeader); HttpResponse response = null; try { response = client.execute(delete); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { System.out.println("Deleted the goods successfully."); } else { System.out.println("goods delete NOT successful. Status code is " + statusCode); } delete.releaseConnection(); } catch (IOException e) { e.printStackTrace(); } } } /** * distinguish whether can access sfdc or not * * @return */ private static boolean isAccessable() { HttpClient httpClient = HttpClientBuilder.create().build(); // Assemble the login request URL String loginURL = LOGINURL + GRANTSERVIVE + "&client_id=" + CLIENTID + "&client_secret=" + CLIENTSECRET + "&username=" + USERNAME + "&password=" + PASSWORD; // Login requests must be POSTs HttpPost httpPost = new HttpPost(loginURL); HttpResponse response = null; try { response = httpClient.execute(httpPost); } catch (ClientProtocolException cpException) { cpException.printStackTrace(); } catch (IOException ioException) { ioException.printStackTrace(); } // verify response is HTTP OK final int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { System.out.println("Error authenticating to Force.com:" + statusCode); return false; } String getResult = null; try { getResult = EntityUtils.toString(response.getEntity()); } catch (ParseException | IOException e) { e.printStackTrace(); } JSONObject jsonObject = null; String loginAccessToken = null; String loginInstanceUri = null; try { jsonObject = (JSONObject) new JSONTokener(getResult).nextValue(); loginAccessToken = jsonObject.getString("access_token"); loginInstanceUri = jsonObject.getString("instance_url"); } catch (JSONException jsonException) { jsonException.printStackTrace(); } baseUri = loginInstanceUri + REST_ENDPOINT + "/Merchandise"; oauthHeader = new BasicHeader("Authorization", "Bearer " + loginAccessToken); System.out.println("oauthHeader1:" + oauthHeader); System.out.println(response.getStatusLine()); System.out.println("Successful login"); System.out.println("instance URL:" + loginInstanceUri); System.out.println("access token/sessing ID:" + loginAccessToken); System.out.println("baseUri:" + baseUri); return true; } /** * httpGet請求RESTful * * @param name * @return */ public static List<Merchandise> getMerchandiseByName(String name) { if (isAccessable()) { String uri = baseUri + "/getMerchandiseByName?name=" + name; System.out.println(uri); HttpClient client = HttpClientBuilder.create().build(); HttpGet get = new HttpGet(uri); get.setHeader(oauthHeader); get.setHeader(prettyPrintHeader); try { HttpResponse response = client.execute(get); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { List<Merchandise> merchandiseList = new ArrayList<Merchandise>(); String response_string = EntityUtils.toString(response.getEntity()); System.out.println("response_string:" + response_string); JSONArray jsonArray = new JSONArray(response_string); JSONObject jsonObject = null; for (int i = 0; i < jsonArray.length(); i++) { jsonObject = jsonArray.getJSONObject(i); Merchandise item = new Merchandise(); if (jsonObject != null) { item.setName(jsonObject.getString("Name")); item.setPrice(jsonObject.getDouble("Price__c")); item.setQuantity(jsonObject.getInt("Quantity__c")); } merchandiseList.add(item); } get.releaseConnection(); return merchandiseList; } else { get.releaseConnection(); return null; } } catch (JSONException e) { System.out.println("Issue creating JSON or processing results"); e.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } catch (NullPointerException npe) { npe.printStackTrace(); } } return null; } /** * httpPost請求 call restful api to create a merchandise return merchandise Id * * @param name * @param price * @param quantity */ public static void createMerchandise(String name, String price, String quantity) { try { if (isAccessable()) { String uri = baseUri + "/insertMerchandise"; System.out.println(uri); JSONObject merchandise = new JSONObject(); merchandise.put("name", name); merchandise.put("price", price); merchandise.put("quantity", quantity); System.out.println("JSON for merchandises record to be insert:\n" + merchandise.toString()); // Construct the objects needed for the request HttpClient httpClient = HttpClientBuilder.create().build(); ; System.out.println("oauthHeader" + oauthHeader); HttpPost httpPost = new HttpPost(uri); httpPost.addHeader(oauthHeader); httpPost.addHeader(prettyPrintHeader); httpPost.addHeader("encoding", "UTF-8"); // The message we are going to post StringEntity body = new StringEntity(merchandise.toString(1)); System.out.println(merchandise.toString(1)); body.setContentType("application/json"); httpPost.setEntity(body); // Make the request HttpResponse response = httpClient.execute(httpPost); System.out.println("response: " + response.toString()); // Process the results int statusCode = response.getStatusLine().getStatusCode(); System.out.println("status code: " + statusCode); if (statusCode == HttpStatus.SC_OK) { String response_String = EntityUtils.toString(response.getEntity()); if (response_String != null) { System.out.println("New Merchandise id from response:" + response_String); } } else { System.out.println("Insertion unsuccessful.Status code returned is" + statusCode); } httpPost.releaseConnection(); } } catch (JSONException e) { System.out.println("Issue creating JSON or processing results"); e.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } catch (NullPointerException npe) { npe.printStackTrace(); } }}
下边是在JAVA的main方法中的测试结果
public static void main(String[] args) { // 测试restful 创建一个merchandise // createMerchandise("testSalesforceRestfulApi", "2000", "20001"); // 测试restful 查询一个List结果集 /*List<Merchandise> list = getMerchandiseByName("testSalesforceRestfulApi"); for (Merchandise item : list) { System.out.print(item.getName() + "\t"); System.out.print(item.getPrice() + "\t"); System.out.println(item.getQuantity() + "\t"); }*/ //删除一个Merchandise //deleteMerchandise("testSalesforceRestfulApi"); }
1、创建
oauthHeader1:Authorization: Bearer 00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.HTTP/1.1 200 OKSuccessful logininstance URL:https://ap4.salesforce.comaccess token/sessing ID:00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.baseUri:https://ap4.salesforce.com/services/apexrest/Merchandisehttps://ap4.salesforce.com/services/apexrest/Merchandise/insertMerchandiseJSON for merchandises record to be insert:{"quantity":"20001","price":"2000","name":"testSalesforceRestfulApi"}oauthHeaderAuthorization: Bearer 00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.{ "quantity": "20001", "price": "2000", "name": "testSalesforceRestfulApi"}response: HttpResponseProxy{HTTP/1.1 200 OK [Date: Sat, 18 Mar 2017 10:46:28 GMT, X-Content-Type-Options: nosniff, X-XSS-Protection: 1; mode=block, Content-Security-Policy: reflected-xss block;report-uri /_/ContentDomainCSPNoAuth?type=xss, Content-Security-Policy: referrer origin-when-cross-origin, Set-Cookie: BrowserId=zDGh-qaEQOK5dJ9CGjk37A;Path=/;Domain=.salesforce.com;Expires=Wed, 17-May-2017 10:46:28 GMT, Expires: Thu, 01 Jan 1970 00:00:00 GMT, Content-Type: application/json;charset=UTF-8, Vary: Accept-Encoding, Transfer-Encoding: chunked] org.apache.http.client.entity.DecompressingEntity@77e9807f}status code: 200New Merchandise id from response:"a026F00000w1byFQAQ"
2、查询一个List结果
oauthHeader1:Authorization: Bearer 00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.HTTP/1.1 200 OKSuccessful logininstance URL:https://ap4.salesforce.comaccess token/sessing ID:00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.baseUri:https://ap4.salesforce.com/services/apexrest/Merchandisehttps://ap4.salesforce.com/services/apexrest/Merchandise/getMerchandiseByName?name=testSalesforceRestfulApiresponse_string:[ { "attributes" : { "type" : "Merchandise__c", "url" : "/services/data/v39.0/sobjects/Merchandise__c/a026F00000w1byFQAQ" }, "Quantity__c" : 20001, "Price__c" : 2000.00, "Name" : "testSalesforceRestfulApi", "Id" : "a026F00000w1byFQAQ"} ]testSalesforceRestfulApi 2000.0 20001
3、删除一个Merchandise通过HttpDelete
oauthHeader1:Authorization: Bearer 00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.HTTP/1.1 200 OKSuccessful logininstance URL:https://ap4.salesforce.comaccess token/sessing ID:00D6F000000DauB!AQEAQFTLrj3cDuNoJuemXGm4HES9HvyHV9uJZk_TQVGAUd_oi5ZmxRWWYSsKB5Ibp8AOIALrR51laxO4jSnndv5.bsRk6G3.baseUri:https://ap4.salesforce.com/services/apexrest/MerchandiseDeleted the goods successfully.
该JAVA项目中需要的jar包
阅读全文
0 0
- 73、salesforce通过JAVA来Call在salesforce中已经写好的Restful处理接口
- 72、salesforce call RESTful 的方式
- 在salesforce中 处理 Holiday
- SalesForce
- SalesForce
- SalesForce
- Salesforce
- Salesforce
- Salesforce中通过SOAP API和Metadata API开发java的web server服务
- salesforce中RemoteObjects的应用
- 在Java程序中调用Salesforce REST API
- 在Salesforce中实现字段级的数据校验
- 在Salesforce中实现用于数据校验的触发器
- 在salesforce中更换自定义app的logo
- 在salesforce中使用Partner Community的基本流程
- salesforce 好的CRM系统,界面制胜
- Salesforce软件用户的福利来啦
- 在salesforce中如何获取Security Token
- 71、salesforce的JSON方法
- 54、tensorflow手写识别的高级版本
- 人工智能(三)上——通过搜索进行问题求解
- [LeetCode]根据树的遍历还原树(1)
- 72、salesforce call RESTful 的方式
- 73、salesforce通过JAVA来Call在salesforce中已经写好的Restful处理接口
- 《Spring 5 官方文档》14.DAO support
- 74、Salesforce的String的format方法
- 75、python学习第一篇
- 抽奖
- 76、python学习第二篇
- 关于JMeter的CSV Data Set Config的源码改写(包括了部分界面等代码的分析)
- 77、tensorflow手写识别基础版本
- 78、tensorflow滑动平均模型,用来更新迭代的衰减系数