Encontré una pregunta interesante mientras trabajaba con Spring y REST API y ese problema es: ¿La ruta está limitada a una cierta cantidad de caracteres en Spring?
El código es el siguiente
@RequestMapping(value = {REST_PREFIX + "/{key}"}, method = {RequestMethod.GET}) public DashboardItem getExceptionByKey(@PathVariable("key") String key, HttpServletRequest request, HttpServletResponse httpResponse_p) { log.info("URL is {}", request.getRequestURL()); log.info("Key is {}", key); return InspectionUtils.getExceptionByKey(key); }Un ejemplo de clave es
67E4D2C089CBCCA2A9732F6986124C6B10.243.2.107#0EEE5EAB06ED4FFF82A8934F7058860C#79A2F0C170A028A3B0410F0F16303F41Al enviar la solicitud me aseguré de codificar la URL y en mi programa la URL que estoy recibiendo es la siguiente
/rest/exceptions/67E4D2C089CBCCA2A9732F6986124C6B10.243.2.107#0EEE5EAB06ED4FFF82A8934F7058860C#79A2F0C170A028A3B0410F0F16303F41Por lo tanto, recibo la clave del agujero, pero cuando la analiza, la clave variable es solo
67E4D2C089CBCCA2A9732F6986124C6B10.243.2Pensé que podrían ser caracteres especiales, pero no lo parece. Mi segunda conjetura es que hay una limitación para la longitud del camino.
Entonces, mi pregunta para usted es si hay una limitación con respecto a la ruta o hay otro problema.
Gracias
Esta es una especie de convención de primavera que trata todo después del último punto como una extensión de archivo y lo corta. Simplemente podría intentar agregar un final / en su asignación de solicitud y la solicitud. Es decir REST_PREFIX + "/{key}/"
Para una solución más complicada pero mejor si no es usted quien llama a su API, consulte esta pregunta
Debe ser el carácter hash # en su key que no se codifica como URL. Y dado que todo lo que viene después de # en la URL representa diferentes fragmentos de la página HTML, nunca se envía al servidor.
Al usar encodeURIComponent() de JavaScript en su key , obtuve:
67E4D2C089CBCCA2A9732F6986124C6B10.243.2.107%230EEE5EAB06ED4FFF82A8934F7058860C%2379A2F0C170A028A3B0410F0F16303F41
Observe que el carácter # ahora está codificado. Intente esto, pero es posible que deba decodificarlo en su servidor.
El carácter # tiene un significado especial en una URL. Es un identificador de fragmento y se usa para saltar a una parte determinada de una página (en lugar de aterrizar en la parte superior). Para evitar esto, codifique el carácter como %23 .