Это не повторяющийся упомянутый вопрос, поскольку он специфичен для Spring. Тот, кто добавил это (через 3 года после факта!), Не удосужился прочитать ветку вопросов или комментариев, чтобы увидеть, каков был настоящий ответ. Принятый ответ - не совсем ответ, но автор ответа так и не вернулся и отредактировал его, как я просил.
Учитывая приведенный ниже метод успокоения, Spring 3.1 выдает ошибку 400 с «Запрос, отправленный клиентом, был синтаксически неверным ()». когда параметр token
содержит косую черту в кодировке URL (% 2F), например "https://somewhere.com/ws/stuff/lookup/resourceId/287559/token/R4o6lI%2FbBx43/userName/jim "Без% 2F все работает нормально. Третья сторона уже звонит в эту службу (конечно!), Поэтому я не могу изменить то, что они отправляют, по крайней мере, в краткосрочной перспективе. Есть идеи, как обойти это на стороне сервера?
Эта проблема очень хорошо описана здесь https://jira.springsource.org/browse/SPR-8662 хотя эта проблема связана с UriTemplate, который я не использую, я могу сказать.
@RequestMapping("/ws/stuff/**")
@Controller
public class StuffController {
@RequestMapping(value = "/ws/stuff/lookup/resourceId/{resourceId}/token/{token}/userName/{userName}", method = RequestMethod.GET)
public @ResponseBody
String provisionResource(@PathVariable("resourceId") String resourceId, @PathVariable("token") String token, @PathVariable("userName") String userName, ModelMap modelMap,
HttpServletRequest request, HttpServletResponse response) {
return handle(resourceId, userName, request, token, modelMap);
}
}
Примечание: это на Glassfish 3.1.2, и сначала Grizzly / Glassfish не принимали косую черту, но
-Dcom.sun.grizzly.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
исправил это.
asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-2.http.encoded-slash-enabled=true
похоже, не помогло.