sirve requestmapping que para mvc modelandview example ejemplo spring rest glassfish glassfish-3 spring-3

requestmapping - spring mvc netbeans



Barra codificada(% 2F) con la ruta Spring RequestMapping param da HTTP 400 (6)

Esta no es una pregunta de referencia duplicada, porque es específica de Spring. 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 el parámetro del token contiene una barra codificada 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. ¿Alguna idea sobre cómo solucionar esto en el lado del servidor?

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 y que puedo decir.

@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 parece ayudar


Acabamos de encontrarnos con este problema en mi oficina, hicimos la sugerencia anterior de lo que Solubris dijo donde lo pusiste en un parámetro de consulta. El único requisito adicional es que los datos también pueden tener un ''&'', lo que desordenaría el parámetro de consulta. Todo lo que tuvimos que hacer es codificar el texto antes de que se envíe en la URL e incluso ''&'' fueron eliminados.


Aquí hay una solución para Spring 3.2.4 (también debería funcionar para otras versiones). Uno debe sobrescribir el valor predeterminado UrlPathHelper

public class UrlPathHelperFixed extends UrlPathHelper { public UrlPathHelperFixed() { super.setUrlDecode(false); } @Override public void setUrlDecode(boolean urlDecode) { if (urlDecode) { throw new IllegalArgumentException("Handler [" + UrlPathHelperFixed.class.getName() + "] does not support URL decoding."); } } @Override public String getServletPath(HttpServletRequest request) { String servletPath = getOriginatingServletPath(request); return servletPath; } @Override public String getOriginatingServletPath(HttpServletRequest request) { String servletPath = request.getRequestURI().substring(request.getContextPath().length()); return servletPath; } }

E inyectarlo en el controlador de mapas:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> <property name="order" value="-1"></property> <property name="urlPathHelper"> <bean class="com.yoochoose.frontend.spring.UrlPathHelperFixed"/> </property> </bean>

Después de un día de trabajo duro, ahora funciona para mí :-)

Se sugirió al equipo de Spring como https://jira.springsource.org/browse/SPR-11101


Esta podría ser su respuesta: la barra diagonal urlencoded está rompiendo la URL

Sugeriría no poner eso en la ruta, muévalo a un parámetro de solicitud en su lugar.

Trabajar alrededor de

Usted podría cambiar el RequestMapping a

@RequestMapping(value = "/ws/stuff/lookup/resourceId/**", method = RequestMethod.GET)

y luego analizar las variables de ruta manualmente desde el objeto de solicitud.


He encontrado esta solución que está funcionando para mí;

System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");

justo antes de springApplication.run (args);

y añada el siguiente código en la clase de aplicación

@Override public void configurePathMatch(PathMatchConfigurer configurer) { UrlPathHelper urlPathHelper = new UrlPathHelper(); urlPathHelper.setUrlDecode(false); configurer.setUrlPathHelper(urlPathHelper); }


Para la aplicación de arranque de primavera esto funcionó para mí ...

Versión 1 Añadir

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

a su archivo application.properties

La versión 2 ejecuta su aplicación de arranque de primavera de esta manera.

static void main(String[] args) { System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true"); SpringApplication.run this, args }

Versión 3 o ejecute su aplicación java con -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true

Esta variable de ruta de barra diagonal codificada% 2F para mí.


para la bota de primavera, lo siguiente hizo el truco

@SpringBootApplication public class Application extends WebMvcConfigurerAdapter { public static void main(String[] args) throws Exception { System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true"); SpringApplication.run(Application.class, args); } @Override public void configurePathMatch(PathMatchConfigurer configurer) { UrlPathHelper urlPathHelper = new UrlPathHelper(); urlPathHelper.setUrlDecode(false); configurer.setUrlPathHelper(urlPathHelper); } }