Я устанавливаю значения в HashMap из запроса к базе данных, который является полем объекта:
public class MyObject {
public HashMap<String, Object> ACCOUNT_DATA = new HashMap<String, String>();
etc....
}
public class Data{
retrieve data in for loop....
myObject.ACCOUNT_DATA.put("Id","Value");
}
My Salesforce Record Update принимает следующие параметры:
update(String objectName, String recordID, mapOfData);
Когда я пытаюсь использовать полученные данные, используя:
rest.update("Account", o.getId(), o.ACCOUNT_DATA);
, я получаю:
400 HttpResponseProxy{HTTP/1.1 400 Bad Request ...
Но если я жестко кодирую HashMap, он работает:
HashMap<String, Object> data = new HashMap<String, Object>();
data.put("Id", "value");
rest.update("Account", o.getId(), data);
Я точно знаю, что карта у меня правильная. Может быть проблема с текстом, исходящим от MySQL?
Вот метод полного обновления:
public void update(String object, String id, Map<String, Object> fieldData ) throws SFRestApiException {
// Pull out the metadata
Map<String, Object> objMetadata = objectMetaMap.get(object);
if ( objMetadata == null ){
throw new SFRestApiException("object type unknown: " + object );
}
System.out.println(sessionMap.get("instance_url") + getObjectUrl(objMetadata,"sobject") + "/" + id + "?_HttpMethod=PATCH");
HttpClientBuilder builder = HttpClientBuilder.create();
HttpClient client = builder.build();
HttpPost post = new HttpPost( sessionMap.get("instance_url") + getObjectUrl(objMetadata,"sobject") + "/" + id + "?_HttpMethod=PATCH" );
post.addHeader("Authorization", getAuthorization() );
post.addHeader("Content-Type", "application/json");
//post.setBodyAsByte( Jackson.toJsonString(fieldData).getBytes() );
HttpEntity entity = new ByteArrayEntity(Jackson.toJsonString(fieldData).getBytes());
post.setEntity(entity);
/////////////////////////////////////////////////////////////////
HttpResponse response = null;
try{
response = client.execute(post);
sfApiUsage = response.getFirstHeader("Sforce-Limit-Info").getValue();
int responseCode = response.getStatusLine().getStatusCode();
if ( responseCode == 204 ){
return ;
}else if ( responseCode == 401 ){
doSessionExecution();
update( object, id, fieldData );
}else{
throw new SFRestApiException( responseCode, response.toString() );
}
} catch (IOException e) {
throw new SFRestApiException( e.getMessage() );
}
}