неправильная кодировка для ? персонаж в Rest API

Я создаю Rest API с загрузкой Spring, и когда я передаю запрос с "?" символ для проверки метода get с параметром запроса "?" символ не закодирован.

Здесь вы можете найти мой пружинный контроллер.

@RequestMapping(value = "/response/{query}", method =     RequestMethod.GET,headers="Accept=application/json")
public  QueryRep getResponse(@PathVariable("query") String query)
{
     QueryRep test=new QueryRep();
     System.out.println(query);
// code !!
return test;
}

если я проверяю, например: как меня зовут? Я получаю следующий URL-адрес: http://localhost:8080/response/what%20is%20my%20name? и я получаю в своей консоли строку «как меня зовут» (без символа «?»). Как вы можете видеть "?" символ не кодируется как UTF-8 %3F, в то время как maven (pom.xml) и IDE (STS) настроены на использование UTF-8. Я использую Tomcat в качестве веб-сервера.


person desmanda    schedule 16.05.2016    source источник


Ответы (1)


Общий URI состоит из следующего:

схема:[//[пользователь:пароль@]хост[:порт]][/]путь[?запрос][#фрагмент]

Обратите внимание на часть ?query определения URI (см. https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)

Итак ? — это зарезервированный токен, который отмечает конец пути и начало строки запроса. Если вы хотите, чтобы на вашем пути был символ вопросительного знака, вам придется самостоятельно закодировать его с помощью %3F, например:

http://localhost:8080/response/what%20is%20my%20name%3F

Затем, если вам нужна строка запроса, вы можете сделать это:

http://localhost:8080/response/what%20is%20my%20name%3F?myquery=stuff

person digitaljoel    schedule 16.05.2016
comment
если '?' является допустимым символом в URI, поэтому, почему я не могу получить его в своем запросе, я просто получаю вопрос без '?' , спасибо. - person desmanda; 16.05.2016