Кто устанавливает тип контента запроса в Spring MVC - PullRequest
0 голосов
/ 28 декабря 2011

Я прочитал пост " Кто устанавливает тип содержимого ответа в Spring MVC (@ResponseBody) ", это помогло мне решить мою проблему отображения данных UTF-8 (символы CJK) на клиенте сторона, использующая метод JSON.

Теперь обнаружите, что у меня проблема с отправкой данных в формате UTF-8 на серверную часть с помощью JSON. Метод JavaScript, который я использую:

function startSomething() {

    console.log("startSomething()");
    console.log("  getOriginName() = " + getOriginName());
    console.log("  getDestinationName() = " + getDestinationName());

    $.ajaxSetup({ scriptCharset: "utf-8" , 
                  contentType: "application/json; charset=utf-8"});

    // send the data to server side
    $.ajax({
        url: "/mywebapp/something/start",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: {
            originName          : getOriginName(),
            destinationName     : getDestinationName()
        },
        success: function(response) {
            // do something
        }
    });
}

После запуска метода javascript я могу видеть значение, правильно выведенное на консоль браузера, например:

  getOriginName() = N Bridge Rd
  getDestinationName() = 夢幻之城@ Boat Quay

Код моего сервера:

@RequestMapping("/something")
@Controller
public class TestController {

    // the logger
    private Logger logger = Logger.getLogger(TestController.class);

    @RequestMapping(value = "/start", method = RequestMethod.GET)
    public ResponseEntity<String> start(@RequestParam String originName, 
                                        @RequestParam String destinationName,
                                        HttpServletRequest request, 
                                        HttpServletResponse response) {

        String characterEncoding = request.getCharacterEncoding();
        String contentType = request.getContentType();

        logger.debug("  characterEncoding = " + characterEncoding);
        logger.debug("  contentType = " + contentType);

        if (logger.isDebugEnabled()) {
            String logMessage = StringUtils.join(
                    new Object[]{
                            "  originName = ", originName,
                            "  destinationName = ", destinationName
                    }
            );
            logger.debug(logMessage);
        }

        ...
    }
}

Вывод моего серверного кода:

TestController -   characterEncoding = UTF-8
TestController -   contentType = application/json; charset=utf-8
TestController -   originName = N Bridge Rd  destinationName = 夢幻ä¹å@ Boat Quay

Вы можете видеть, что кодировкой запроса является UTF-8, но значение на стороне клиента является неправильно закодированным символом CJK.

Что здесь может пойти не так? Пожалуйста, дайте мне несколько советов, спасибо. George

1 Ответ

4 голосов
/ 29 декабря 2011

У меня была похожая проблема с JSON & Spring, и я решил ее, указав URIEncoding="UTF-8" в <Connector> в моей конфигурации Tomcat server.xml, как описано здесь:

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...