Pengkodean JAX-RS

Saya menggunakan JAX-RS untuk membuat layanan web (lainnya) yang mengembalikan hasil dalam format JSON.

Semuanya baik-baik saja, kecuali pengkodeannya.

Misalnya, saya mendapatkan:

 ..., parameter:"Dep\u00f3sitos" ,...

Alih-alih:

 ..., parameter:"DepĆ³sitos" ,...

Saya sudah mencoba menggunakan:

@Produces("application/json; charset=UTF-8")

tapi masalahnya tetap ada. Jika saya mengembalikannya sebagai XML hanya dengan menggunakan:

@Produces("application/xml")

Semuanya baik-baik saja.

Apa yang perlu saya atur untuk menghasilkan tipe yang tepat?


person RedEagle    schedule 02.03.2011    source sumber
comment
Bisakah Anda mengedit pertanyaan Anda untuk memasukkan kode sebenarnya dari metode JSON Anda?   -  person Jim Ferrans    schedule 04.03.2011


Jawaban (3)


Yang Anda butuhkan hanyalah ini:

String back = "DepĆ³sitos";
return new String(back.getBytes(), "UTF8");
person Frank    schedule 14.03.2014
comment
Ini adalah kode yang tidak berguna dan berbahaya. String.getBytes() mengonversi string menjadi pengkodean default platform. Katakanlah Anda menggunakan Windows, jadi ini mungkin pada CP1252. Kemudian Anda membuat objek String baru dari byte ini dan memberi tahu Java bahwa byte harus ditafsirkan sebagai UTF-8, meskipun byte tersebut adalah teks CP1252 dalam contoh ini, yang akan menimbulkan masalah. Lebih lanjut: back sudah menjadi String, objek Java String dapat dilihat sebagai teks tanpa pengkodean (mereka dikodekan dengan UTF-16 secara internal, tetapi ini tidak masalah). Pengkodean menjadi penting hanya ketika sebuah String dikonversi menjadi byte. - person Sky; 06.03.2018

Saya akhirnya menggunakan GSON daripada JSON4J IBM yang terbukti jauh lebih baik dalam menangani serialisasi kelas Java khusus.

person RedEagle    schedule 09.03.2011

Lihatlah jawaban Bryant Luk untuk pertanyaan "Bagaimana cara menyetel charset dengan JAX-RS?" dan lihat apakah ini berhasil.

person bamana    schedule 02.03.2011