Saya memanggil layanan REST dengan permintaan JSON dan merespons dengan HTTP 415 "Unsupported Media Type"
kesalahan.
Jenis konten permintaan diatur ke ("Content-Type", "application/json; charset=utf8")
.
Ini berfungsi dengan baik jika saya tidak menyertakan objek JSON dalam permintaan. Saya menggunakan google-gson-2.2.4
perpustakaan untuk JSON.
Saya mencoba menggunakan beberapa pustaka yang berbeda tetapi tidak ada bedanya.
Adakah yang bisa membantu saya untuk menyelesaikan ini?
Ini kode saya:
public static void main(String[] args) throws Exception
{
JsonObject requestJson = new JsonObject();
String url = "xxx";
//method call for generating json
requestJson = generateJSON();
URL myurl = new URL(url);
HttpURLConnection con = (HttpURLConnection)myurl.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("Content-Type", "application/json; charset=utf8");
con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("Method", "POST");
OutputStream os = con.getOutputStream();
os.write(requestJson.toString().getBytes("UTF-8"));
os.close();
StringBuilder sb = new StringBuilder();
int HttpResult =con.getResponseCode();
if(HttpResult ==HttpURLConnection.HTTP_OK){
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8"));
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
br.close();
System.out.println(""+sb.toString());
}else{
System.out.println(con.getResponseCode());
System.out.println(con.getResponseMessage());
}
}
public static JsonObject generateJSON () throws MalformedURLException
{
String s = "http://www.example.com";
s.replaceAll("/", "\\/");
JsonObject reqparam=new JsonObject();
reqparam.addProperty("type", "arl");
reqparam.addProperty("action", "remove");
reqparam.addProperty("domain", "staging");
reqparam.addProperty("objects", s);
return reqparam;
}
}
Nilai requestJson.toString()
adalah:
{"type":"arl","action":"remove","domain":"staging","objects":"http://www.example.com"}
java
json
http-status-code-415
pengguna3443794
sumber
sumber
requestJson.toString()
Jawaban:
Tidak yakin tentang alasannya tetapi Menghapus baris
charset=utf8
daricon.setRequestProperty("Content-Type", "application/json; charset=utf8")
menyelesaikan masalah.sumber
charset
untuk disetel dalam Jenis Konten. Dugaan saya adalah mereka memeriksa apakah stringnya"application/json; charset=utf-8" == "application/json"
. Karena itu, JSON harus utf-8 jadi benar-benar valid untuk mengabaikan charset.charset=utf8
bukan sebutan himpunan karakter yang valid. Versi yang benar adalahcharset=utf-8
. Tanda hubung itu penting. Daftar penunjukan himpunan karakter yang valid dikelola oleh IANA RFC2879: iana.org/assignments/character-sets/character-sets.xhtmlTambahkan
Content-Type
:application/json
danAccept
:application/json
sumber
Ini karena
charset=utf8
harus tanpa spasi setelahnyaapplication/json
. Itu akan bekerja dengan baik. Gunakan seperti ituapplication/json;charset=utf-8
sumber
Jika Anda membuat request ajax jquery, jangan lupa untuk menambahkan
sumber
Jika Anda menggunakan
AJAX
jQuery
Request, ini adalah keharusan untuk mendaftar. Jika tidak itu akan membuat Anda415
Error.sumber
Tambahkan manajer header HTTP dan tambahkan di dalamnya nama dan nilai header API Anda. mis. Jenis konten, Terima, dll. Itu akan menyelesaikan masalah Anda.
sumber
Jika Anda mendapatkan ini di middleware React RSAA atau yang serupa, Tambahkan header:
sumber
Beberapa kali Charset Metada merusak json saat mengirim permintaan. Lebih baik, jangan gunakan charset = utf8 dalam jenis permintaan.
sumber
Saya memperbaikinya dengan memperbarui
Request
kelas yang diterima Kontroler saya.Saya menghapus anotasi tingkat kelas berikut dari
Request
kelas saya di sisi server saya. Setelah itu klien saya tidak mendapatkan error 415.sumber
sumber
Saya mengirim permintaan istirahat "hapus" dan gagal dengan 415. Saya melihat tipe konten apa yang digunakan server saya untuk menekan api. Dalam kasus saya, ini adalah "application / json", bukan "application / json; charset = utf8".
Jadi tanyakan dari pengembang api Anda Dan sementara itu coba kirim permintaan hanya dengan content-type = "application / json".
sumber
Saya memiliki masalah yang sama. Masalah saya adalah objek yang rumit untuk serialisasi. Salah satu atribut dari objek saya adalah
Map<Object1, List<Object2>>
. Saya mengubah atribut ini seperti diList<Object3>
manaObject3
berisiObject1
danObject2
dan semuanya berfungsi dengan baik.sumber
Saya tahu ini sudah terlambat untuk membantu OP dengan masalahnya, tetapi bagi kita semua yang baru saja mengalami masalah ini, saya telah memecahkan masalah ini dengan menghapus konstruktor dengan parameter Kelas saya yang dimaksudkan untuk menyimpan data json.
sumber
Tambahkan MappingJackson2HttpMessageConverter secara manual dalam konfigurasi memecahkan masalah untuk saya:
sumber
Alasannya tidak bisa menambahkan "annotation-driven" di file xml servlet operator Anda. dan juga mungkin karena tidak menambahkan sebagai application / json di header
sumber