Код ошибки HTTP 415 - массивы JSON в JAVA - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать и отправить через JAVA файл JSON, и когда я пытаюсь добавить вложенный объект с массивом, чтобы соответствовать протоколу приложения (что не важно для вопроса), Java-программа не может отправитьфайл из-за ошибки HTTP, код 415 (неподдерживаемый тип носителя), что странно, потому что созданный JSON работает, когда я копирую его в целевое приложение (Google DialogFlow).Другими словами, JSON функционален, но JAVA (версия 1.8) не распознает его.У кого-нибудь есть идеи, почему это происходит?

Когда деталь с JSONArray не включена в файл JSON, запрос отправляется без проблем (см. Код ниже).Я попытался изменить тип содержимого с «application / json; charset = utf8» на «application / json; charset = utf-8» или «application / json», но ничего не получилось (эта часть не включена в код, посколькуизменения, которые привели к тому, что JSON не работал, были в блоке ниже).

Часть не работает:

 static JSONObject messageToJSON()
 {
 JSONObject requestJson = new JSONObject();
 JSONObject meta= new JSONObject();
 JSONObject payload= new JSONObject();
 JSONArray arrayJson = new JSONArray();
 String messageData="My Message";    
 try
 {
 requestJson.put("message", messageData);
 requestJson.put("messageType", "html");
 payload.put("title",  "Thanks");
 payload.put("message",  "Thank you");
 arrayJson.put(payload);
 meta.put("contentType", "300");
 meta.put("templateId", "6");
 meta.put("contentType", "300");
 meta.put("payload", arrayJson);
 requestJson.put("metadata", meta);
 System.out.println(requestJson.toString());
 }
 catch (JSONException e)
 {
 e.printStackTrace();
 }
 return requestJson;
 }

Часть работает (без дополнительного слоя в JSON, например, объект JSON полезной нагрузки имассив Json массив JSON):

 static JSONObject messageToJSON()
 {
 JSONObject requestJson = new JSONObject();
 JSONObject meta= new JSONObject();
 JSONObject payload= new JSONObject();
 JSONArray arrayJson = new JSONArray();
 String messageData="My Message";    
 try
 {
 requestJson.put("message", messageData);
 requestJson.put("messageType", "html");
 meta.put("contentType", "300");
 meta.put("templateId", "6");
 meta.put("contentType", "300");
 requestJson.put("metadata", meta);
 System.out.println(requestJson.toString());
 }
 catch (JSONException e)
 {
 e.printStackTrace();
 }  
 return requestJson;
 }

1 Ответ

0 голосов
/ 21 февраля 2019

Хорошо, я нашел проблему.Я должен был преобразовать arrayJson из типа JSONArray в строку.Другими словами, вместо

meta.put("payload", arrayJson);

у меня должно быть

meta.put("payload", arrayJson.toString());

или сделать массив Json в формате строки с самого начала.

...