Spring RestTemplate 的 400 错误请求和 Salesforce.com 连接的应用程序上的 GET
400 Bad Request for Spring RestTemplate and GET on Salesforce.com Connected Apps
使用连接的应用程序和 Spring RestTemplate 客户端为 Salesforce.com 对象查询创建基本 API 时遇到问题。使用 POST 操作的初始身份验证步骤工作正常,returns Salesforce 实例 URL 以及所需的访问令牌。以下 GET 操作失败并出现错误 400。URL 和访问令牌均由 Chrome POSTMAN 插件验证,组合 returns 一个有效的 JSON 响应。
另外值得一提的是,传统的实现效果并不好,"setAccept"是后来尝试解决mediatype解析的尝试
下面错误代码:
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.parseMediaType("application/json")));
headers.add("User-Agent", USER_AGENT);
headers.add("Authorization", "Bearer " + accessToken);
HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<String> responseBodyForGet = restRetrieveSalesforceData
.exchange(url, HttpMethod.GET, request, String.class);
修复Spring RestTemplate GET 操作中的400 错误的解决方案如下:
URI targetUrl = UriComponentsBuilder.fromUriString(url).build().toUri();
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer " + accessToken);
HttpEntity<String> request = new HttpEntity<String>(headers);
logger.info("Requesting GET from: " + url);
ResponseEntity<String> responseBodyForGet = restRetrieveSalesforceData.exchange(targetUrl,
HttpMethod.GET, request, String.class);
我已将解决方案添加到上面发布的报告中。观察第一条语句UriComponentsBuilder的使用,它解决了GET时的400问题。
使用连接的应用程序和 Spring RestTemplate 客户端为 Salesforce.com 对象查询创建基本 API 时遇到问题。使用 POST 操作的初始身份验证步骤工作正常,returns Salesforce 实例 URL 以及所需的访问令牌。以下 GET 操作失败并出现错误 400。URL 和访问令牌均由 Chrome POSTMAN 插件验证,组合 returns 一个有效的 JSON 响应。
另外值得一提的是,传统的实现效果并不好,"setAccept"是后来尝试解决mediatype解析的尝试
下面错误代码:
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.parseMediaType("application/json")));
headers.add("User-Agent", USER_AGENT);
headers.add("Authorization", "Bearer " + accessToken);
HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<String> responseBodyForGet = restRetrieveSalesforceData
.exchange(url, HttpMethod.GET, request, String.class);
修复Spring RestTemplate GET 操作中的400 错误的解决方案如下:
URI targetUrl = UriComponentsBuilder.fromUriString(url).build().toUri();
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer " + accessToken);
HttpEntity<String> request = new HttpEntity<String>(headers);
logger.info("Requesting GET from: " + url);
ResponseEntity<String> responseBodyForGet = restRetrieveSalesforceData.exchange(targetUrl,
HttpMethod.GET, request, String.class);
我已将解决方案添加到上面发布的报告中。观察第一条语句UriComponentsBuilder的使用,它解决了GET时的400问题。