409 HTTP ОШИБКА при попытке отправить строку JSON в запросе POST

Мне нужно, чтобы HTTP POST отправлял строку JSON в запросе тела, самым простым способом. API это: "api.nimble.com/api/v1/contact" ( https://nimble.readthedocs.org/en/latest/contacts/basic/create/).

JSON - это строковая переменная (не требуется использовать какие-либо дополнительные библиотеки), ее следует отправлять в теле запроса.

У меня есть следующий код Java, но всегда возвращаю 409 HTTP ERROR.

Кто-то может сказать мне, что я должен изменить / добавить в коде, чтобы работать правильно? Большое спасибо!

ОБНОВЛЕНИЕ: Решение проверено с: http://jsonlint.com/. Правильная строка JSON: (экранируйте двойные кавычки и удаляйте запятые в конце полей):

String str_JSON="{\"fields\": {\"first name\": [{\"value\": \"Jack\",\"modifier\": \"\"}],\"last name\": [{\"value\": \"Daniels\",\"modifier\": \"\"}],\"phone\": [{\"modifier\": \"work\",\"value\": \"123123123\"},{\"modifier\": \"work\",\"value\": \"2222\"}]},\"type\": \"person\",\"tags\": \"test\"}";

Код:

String str_response="";
String access_token=request.getParameter("at");
String data="{'fields': {'first name': [{'value': 'Jack','modifier': '',}],'last name': [{'value': 'Daniels','modifier': '',}],'phone': [{'modifier': 'work','value': '123123123',}, {'modifier': 'work','value': '2222',}],},'type': 'person','tags': 'test'}";
try{
    URL url = new URL("https://api.nimble.com/api/v1/contact?access_token="+access_token);
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type","application/json");
    connection.setUseCaches(false);
    connection.setDoInput(true);
    connection.setDoOutput(true);
    //Send Request
    DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
    wr.writeBytes(data);
    wr.flush();
    wr.close();
    System.out.println("Api:"+url.getHost()+url.getPath());
    System.out.println("Header:"+connection.getHeaderField("Content-Type"));
    System.out.println("content:"+connection.getContent());
    //Get Response
    BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String line;
    while ((line = rd.readLine()) != null) {
        str_response+= line + '\r';
    }
    rd.close();
}catch(Exception e){
    System.out.println("Exception:"+message);
}

Я также попытался изменить строки 13-15 с этим, но результат тот же:

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);

Выход:

Api:api.nimble.com/api/v1/contact
Header:application/json; charset=UTF-8
Exception:Server returned HTTP response code: 409 for URL: https://api.nimble.com/api/v1/contact?access_token=38fb4aa33a101ba1c385840409a8ae7b

0 ответов

Другие вопросы по тегам