3

这是我的控制器:

@RequestMapping(method = RequestMethod.GET, value="/test/**", headers="Accept=*/*")
public @ResponseBody ResponseEntity<byte[]> getRequest(HttpServletRequest request) 
{
        System.out.println((String) request.getAttribute( HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE ));
}

每当我想创建如下所示的GET请求时:localhost:8080/test/some/request/given/in我的系统在控制台中写入:

some/request/given/in

如我所愿。当我使用斜杠/符号%2F%2f. 当我的路径中有这些符号时,控制器根本不处理请求。

有没有什么办法解决这一问题?

4

3 回答 3

4

通常大多数应用程序服务器不会将%2F其视为/%2FURL 中找到。但是由于规范声明%2F是可以指定路径分隔符的方式之一,为了处理这种情况,tomcat 提供了系统级属性

对于tomcat,如果

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

然后 将被允许作为路径分隔符%2F请参阅文档。这可以在tomcat批处理文件中设置如下%5CJAVA_OPTS

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%   -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

这是专门针对 Tomcat 的。我相信其他应用服务器也会有类似的安排。

于 2013-08-08T11:08:36.087 回答
1

您需要使用 URL 编码器和解码器来发送带有特殊字符的路径参数,例如/-。在您的服务器端代码中,您只需要输入:

String result = URLDecoder.decode(url, "UTF-8");

然后获取参数。

于 2013-08-08T09:11:15.233 回答
0

您遇到的问题是编码的斜杠字符%2f被放置在abs_pathHTTP URL 的一部分中,如RFC 2616的第 3.2.1 节中所定义。RFC 2396abs_path中定义的语法是根据 US-ASCII 字符而不是语义字符“斜杠”来专门定义的。如果出于某种原因希望能够使用转义的斜杠字符,则需要使用带有部分的 URL(例如,)。'/'query/test/?some%2frequest

于 2013-08-08T09:38:42.453 回答