powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / передача json из jquery в servlet
6 сообщений из 6, страница 1 из 1
передача json из jquery в servlet
    #38592077
spb_kostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

"Прошу помощи клуба", так как второй день не могу никак победить такую проблему:

есть js, который по нажатию кнопки запускает такую команду

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
		$.ajax({
        	type: "POST",
            contentType: "application/json",
			url: 'save',
			data: StrToJSON(),
            success: function(data, textStatus, jqXHR) {
				if (data == "1") {
					alert("ОК");
				} else {
					alert(data);
				}

			}
        });



функция StrToJSON достаточно простая:

Код: javascript
1.
2.
3.
4.
5.
function StrToJSON() {
	return JSON.stringify({
	"id": $('#block1_id').val(),
	"addr": $('#block1_addr').val(),
	});




есть сервлет, который запускается при вызове ajax

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();

        String datasourceProperties = "/datasourceProperties";

        Props.init(this.getClass().getResource(datasourceProperties).getFile());
        ConnectionFactory.setConfigurtionProperties(Props.getAllProperties());

        String jsonString = new String();
        try {
            String line = "";
            BufferedReader reader = request.getReader();
            while ((line = reader.readLine()) != null)
                jsonString += line;
        } catch (Exception e) {
            e.printStackTrace();
        }

        A1 a1 = new Gson().fromJson(jsonString, A1.class);

        out.write(a1.getAddr());

    }



так вот если в адресе латинские буквы - все нормально, а как только русские проскакивают, сразу получаю ошибку:

Failed parsing JSON source: {...} to Json
com.google.gson.TokenMgrError: Lexical error at line 1, column 5. Encountered: "М" (1052), after : ""

Применил уже много разных вариантов перекодировки, но ничего не срабатывает :-(

Подскажите, как нужно поступить?
Спасибо
...
Рейтинг: 0 / 0
передача json из jquery в servlet
    #38592355
Sherst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так попробовать:

Код: java
1.
2.
JsonReader reader = new JsonReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
A1 a1 = new Gson().fromJson(reader, A1.class);
...
Рейтинг: 0 / 0
передача json из jquery в servlet
    #38592438
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spb_kostyaПрименил уже много разных вариантов перекодировки, но ничего не срабатывает :-(
Передаете параметрами же?
А java такой загадочный зверек, в его стандартах определили, что servlet принимает параметры исключительно в ISO-8859-1.
Браузеры обычно не в курсе (ну делают вид). И передают иначе.

Прежде чем начать работать с параметром его положено превратить в массив байтов (например .getBytes("ISO-8859-1")).
А потом превратить массив байтов в строку (методом перебора определив нужную кодировку).

Есть правда вариант обернуть на клиенте каким-нибудь encodeURIComponent и уже разворачивать в сервлете (ну или делать пост в варианте application/x-www-form-urlencoded)
...
Рейтинг: 0 / 0
передача json из jquery в servlet
    #38592623
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кодировка запросов настраивается в конфигах сервера, но по быстрому решить можно так :
на клиенте
Код: javascript
1.
data: encodeURI(StrToJSON())


на сервере
Код: java
1.
URLDecoder.decode(line, "UTF-8")
...
Рейтинг: 0 / 0
передача json из jquery в servlet
    #38593166
spb_kostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
из предложенных вариантов без ошибки отработал только вариант такой:

Код: java
1.
2.
byte[] b = jsonString.getBytes("ISO-8859-1");
A1 a1  = new Gson().fromJson(new String(b,"UTF-8"), A1.class);



но при этом русские буквы превращаются в вопросики и теряются уже похоже навсегда...
...
Рейтинг: 0 / 0
передача json из jquery в servlet
    #38598156
spb_kostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в конечном итоге получилось такая реализация:


вместо A1 a1 = new Gson().fromJson(jsonString, A1.class);
написал так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
import org.json.simple.JSONObject;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;

...

        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=utf-8");

A1 a1 = new A1();
try{
        Object obj = new JSONParser().parse(jsonString);
        JSONObject obj2 = (JSONObject)obj;
         a1.setId((String)obj2.get("id"));
         a1.setAddr((String)obj2.get("addr"));
}catch(ParseException pe){
    System.out.println("position: " + pe.getPosition());
    System.out.println(pe);
}
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / передача json из jquery в servlet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]