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=""

Другие вопросы по тегам