Barra codificada (% 2F) con la ruta Spring RequestMapping param da HTTP 400
Esto no es un duplicadopregunta referenciada, porque es primavera específica. Quien haya agregado eso (¡3 años después del hecho!) No se molestó en leer la pregunta o el hilo de comentarios para ver cuál era la respuesta real. La respuesta aceptada no es exactamente la respuesta, pero el autor de la respuesta nunca regresó y la editó como pedí.
Dado el método de descanso a continuación, Spring 3.1 da un error 400 con "La solicitud enviada por el cliente fue sintácticamente incorrecta ()". cuando eltoken
el parámetro contiene una barra inclinada de URL (% 2F), por ejemplo "https://somewhere.com/ws/stuff/lookup/resourceId/287559/token/R4o6lI%2FbBx43/userName/jim"Sin el% 2F, todo funciona bien. Un tercero ya está llamando a este servicio (¡por supuesto!), Así que no puedo cambiar lo que envían, al menos a corto plazo. Cualquier idea sobre cómo solucionar esto en el servidor ¿lado?
Este problema se describe muy bien aquí.https://jira.springsource.org/browse/SPR-8662 aunque ese problema está relacionado con UriTemplate, que no estoy usando, puedo decirlo.
@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);
}
}
Nota: Esto está en Glassfish 3.1.2, y al principio era Grizzly / Glassfish que no aceptaba la barra, pero
-Dcom.sun.grizzly.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
arreglado eso
asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-2.http.encoded-slash-enabled=true
no parecía ayudar