drno-reg
@drno-reg
см не кратко

Как решить проблему с кодировкой при POST JSON на servlet?

Здравствуйте.

в java script ajax запросом методом POST отправляю JSON

var json=[{"FUNCTION_GROUP":"Футбол"},{"FUNCTION_GROUP":"Шахматы"},{"FUNCTION_GROUP":"Плавание"}];
        $.ajax({
            type: 'POST',
            url: 'employees',
            data: JSON.stringify(json),
            success: function(data) {
                console.log( "Данные зафиксированы успешно.");
                },
            error: function(data) {
                console.log( "Отправка данных завершилась завершилась ошибкой: ");
        },
            contentType: "application/json",
            dataType: 'json'
        });


подробности отправки

Request URL:http://localhost:8000/employees
Request Method:POST
Status Code:200 
Remote Address:[::1]:8000
Response Headers
view source
Content-Length:97
Date:Wed, 14 Jun 2017 18:19:20 GMT
Request Headers
view source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:97
Content-Type:application/json
Host:localhost:8000
Origin:http://localhost:8000
Referer:http://localhost:8000/LoginUser
User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
view source
[{FUNCTION_GROUP: "Футбол"}, {FUNCTION_GROUP: "Шахматы"}, {FUNCTION_GROUP: "Плавание"}]
0
:
{FUNCTION_GROUP: "Футбол"}
1
:
{FUNCTION_GROUP: "Шахматы"}
2
:
{FUNCTION_GROUP: "Плавание"}


ниже код java servlet а который принимает POST запрос и обрабатывает JSON

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        StringBuilder sb = new StringBuilder();
        BufferedReader br = request.getReader();
        String str;
        while( (str = br.readLine()) != null ){
            sb.append(str);
        }
        try {
            JSONObject jObj = new JSONObject(sb.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
        System.out.println(sb.toString());
        response.getWriter().append(sb.toString());
   }


ajax данные постит, НО если посмотреть на результат responce в браузере, то кириллица становится абракадаброй

[{"FUNCTION_GROUP":"Ðарды"},{"FUNCTION_GROUP":"Шахматы"},{"FUNCTION_GROUP":"ОБЖ"}]


Как решить эту проблему?

p.s. пробовал в AJAX JSON дополнительно обернуть encodeURI(JSON.stringify(json))
НО в таком случае получаю исключение в сервлете о том, что JSON начинается не с {, подозреваю что кодировка после encodeURI не восстанавливается....
  • Вопрос задан
  • 2532 просмотра
Решения вопроса 1
Попробуйте указать response.setContentType("application/json; charset=utf-8");
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы