Spring MVC Endpoint не извлекается при передаче пустой карты {} в запрос GET
Перед лицом проблемы в получении конечной точки
Ниже случай, когда я вызываю API получить ответ.
http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD
Но когда я устанавливаю следующие данные, они не работают, может ли кто-нибудь помочь мне в этом.
http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD&data={}
@RequestMapping(value = "/apps/{appId_}/users/{username_}", method = RequestMethod.GET)
@ResponseBody
@Transactional
public UserResponseDTO getUserAndToken(@PathVariable Long appId_, @PathVariable String username_, @RequestParam("password") String password_, @RequestParam("data") String datas) throws Exception {
//do stuff
}
РЕДАКТИРОВАТЬ
Эта проблема с любым редактированием это работает в версии Tomcat 7.0.63
Пока другая версия 7.0.73, 8.0.x +
не работает.
2 ответа
Такое поведение влияет на основные обновления Tomcat
,
Для быстрого исправления вы можете перейти на одну из более старых версий, я понизил tomcat с 7.0.63
,
После получения дополнительных исследований Spring MVC
Он отклоняет запрос при добавлении списка недопустимых символов в запрос, указанный ниже.
Исключенные символы US-ASCII, запрещенные в синтаксисе URI:
control = <US-ASCII coded characters 00-1F and 7F hexadecimal>
space = <US-ASCII coded character 20 hexadecimal>
delims = "<" | ">" | "#" | "%" | <">
Список неразумных символов разрешен, но может вызвать проблемы:
unwise = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`"
Следующие символы зарезервированы в компоненте запроса и имеют специальное значение в URI/URL:
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
Для получения дополнительной информации посетите.
Решение:
encodeURI("http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD&data={}")
> http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD&data=%7B%7D
Вы забыли указать {appId_} в value = "/apps/users/{username_}"
Fix: value = "/apps/{appId_}/users/{username_}"
~~~
Ваш метод принимает @RequestParam("data") String datas
и вы отправляете data={}
Строка должна быть заключена в кавычки, поэтому исправление data=""