Java HashMap с mysql данными не выполняет запрос REST Http - PullRequest
0 голосов
/ 29 мая 2020

Я устанавливаю значения в 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() );
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...