Saya mengalami di aplikasi web Anotasi didorong Spring MVC Java saya dijalankan di server web jetty (saat ini dalam plugin maven jetty).
Saya mencoba melakukan beberapa dukungan AJAX dengan satu metode pengontrol mengembalikan hanya teks bantuan String. Sumber daya dalam pengkodean UTF-8 dan demikian juga string, tetapi tanggapan saya dari server datang bersama
content-encoding: text/plain;charset=ISO-8859-1
bahkan ketika browser saya mengirim
Accept-Charset windows-1250,utf-8;q=0.7,*;q=0.7
Saya menggunakan konfigurasi default entah bagaimana pegas
Saya telah menemukan petunjuk untuk menambahkan kacang ini ke konfigurasi, tetapi saya pikir itu tidak digunakan, karena dikatakan tidak mendukung pengkodean dan yang default digunakan sebagai gantinya.
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
</bean>
Kode pengontrol saya adalah (perhatikan bahwa perubahan jenis respons ini tidak berfungsi untuk saya):
@RequestMapping(value = "ajax/gethelp")
public @ResponseBody String handleGetHelp(Locale loc, String code, HttpServletResponse response) {
log.debug("Getting help for code: " + code);
response.setContentType("text/plain;charset=UTF-8");
String help = messageSource.getMessage(code, null, loc);
log.debug("Help is: " + help);
return help;
}
DispatcherServlet
's config (...-servlet.xml
)Saya menemukan solusi untuk Spring 3.1. dengan menggunakan anotasi @ResponseBody. Berikut adalah contoh pengontrol menggunakan output Json:
sumber
<mvc:annotation-driven/>
di applicationContext. (Alih-alih<bean class=" [...] DefaultAnnotationHandlerMapping"/>
, yang sudah usang di Spring 3.2 toh ...)produces
atribut.MediaType.APPLICATION_JSON_UTF8_VALUE
.Perhatikan bahwa di Spring MVC 3.1 Anda dapat menggunakan namespace MVC untuk mengonfigurasi konverter pesan:
Atau konfigurasi berbasis kode:
sumber
Accept-Charset
header yang mungkin mencantumkan setiap pengkodean karakter yang diketahui, dan 2) ketika permintaan memilikiAccept
headersupportedMediaTypes
properti dari konverter tidak digunakan , jadi misalnya ketika saya membuat permintaan mengetik langsung URL di browser responsnya memilikiContent-Type: text/html
tajuk.<bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8" /></bean>
Untuk berjaga-jaga Anda juga dapat mengatur pengkodean dengan cara berikut:
Saya pikir menggunakan StringHttpMessageConverter lebih baik dari ini.
sumber
the manifest may not be valid or the file could not be opened.
di IE 11. Terima kasih digz!Anda dapat menambahkan menghasilkan = "text / plain; charset = UTF-8" ke RequestMapping
lihat blog ini untuk lebih detail
sumber
Saya memerangi masalah ini baru-baru ini dan menemukan jawaban yang jauh lebih baik tersedia di Spring 3.1:
Jadi, semudah JAX-RS sama seperti semua komentar menunjukkan itu bisa / seharusnya.
sumber
produces
mengatakan: "... permintaan hanya dipetakan jika Content-Type cocok dengan salah satu dari jenis media ini." yang berarti AFAIK bahwaproduces
relevan dengan apakah metode tersebut cocok dengan permintaan dan bukan bagaimana jenis konten yang harus respons.Anda dapat menggunakan menghasilkan untuk menunjukkan jenis respons yang Anda kirim dari pengontrol. Kata kunci "menghasilkan" ini akan sangat berguna dalam permintaan ajax dan sangat membantu dalam proyek saya
sumber
Terima kasih digz6666, solusi Anda berfungsi untuk saya dengan sedikit perubahan karena saya menggunakan json:
Jawaban yang diberikan oleh axtavt (yang Anda rekomendasikan) tidak akan bekerja untuk saya. Bahkan jika saya telah menambahkan jenis media yang benar:
sumber
Saya mengatur tipe konten di MarshallingView di kacang ContentNegotiatingViewResolver . Ini bekerja dengan mudah, bersih dan lancar:
sumber
Saya menggunakan CharacterEncodingFilter, dikonfigurasi di web.xml. Mungkin itu membantu.
sumber
forceEncoding=true
itu menyaring respons juga, tetapi tidak akan membantu dalam kasus ini.forceEncoding=false
. Saya hanya mengaturnyafalse
dan "charset = UTF-8" berhasil ditambahkan keContent-Type
header.jika tidak ada yang di atas bekerja untuk Anda mencoba untuk membuat permintaan ajax pada "POST" bukan "MENDAPATKAN", itu bekerja dengan baik untuk saya ... tidak ada di atas yang berhasil. Saya juga memiliki characterEncodingFilter.
sumber
Setelah saya mencoba banyak solusi untuk masalah ini .. Saya pikir ini berhasil dan baik-baik saja.
sumber
Cara sederhana untuk menyelesaikan masalah ini di Spring 3.1.1 adalah: tambahkan kode konfigurasi berikut di
servlet-context.xml
Tidak perlu mengganti atau mengimplementasikan apa pun.
sumber
jika Anda memutuskan untuk memperbaiki masalah ini melalui konfigurasi berikut:
Anda harus mengonfirmasi bahwa hanya ada satu mvc: tag yang digerakkan oleh anotasi di semua file * .xml Anda. jika tidak, konfigurasi mungkin tidak efektif.
sumber
Menurut tautan "Jika pengkodean karakter tidak ditentukan, spesifikasi Servlet mensyaratkan bahwa pengkodean ISO-8859-1 digunakan". Jika Anda menggunakan pegas 3.1 atau yang lebih baru gunakan konfigurasi penebangan untuk mengatur charset = UTF-8 ke response body
@RequestMapping (value = "url pemetaan Anda", menghasilkan = "teks / polos; charset = UTF-8")
sumber
Konfigurasi sampel:
sumber