2016-05-16 4 views
0

Я создаю API-интерфейс Rest с загрузкой Spring и когда передаю запрос с помощью?? чтобы проверить метод get с параметром запроса "?" символ не закодирован.неправильная кодировка для "?" character in Rest api

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

@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 как веб-сервер.

ответ

2

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

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

Обратите внимание на часть определения 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

+0

if '?' является допустимым признаком в URI, поэтому почему я не могу получить его в моем запросе, я просто задаю вопрос без?? , благодаря. – desmanda

+0

ответ обновляется, чтобы предоставить более подробную информацию. – digitaljoel

Смежные вопросы