春天的路径限制

时间:2017-03-12 11:05:38

标签: java spring rest url path

我在使用Spring和REST API时遇到了一个有趣的问题,问题是:Spring中的路径是否仅限于一定数量的字符?

代码如下

@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);
}

密钥的一个例子是

67E4D2C089CBCCA2A9732F6986124C6B10.243.2.107#0EEE5EAB06ED4FFF82A8934F7058860C#79A2F0C170A028A3B0410F0F16303F41

发送请求时,我确保对URL进行编码,在我的程序中,我收到的URL是以下

/rest/exceptions/67E4D2C089CBCCA2A9732F6986124C6B10.243.2.107#0EEE5EAB06ED4FFF82A8934F7058860C#79A2F0C170A028A3B0410F0F16303F41

因此我收到了一个空洞键,但是当它解析它时,变量键只是

67E4D2C089CBCCA2A9732F6986124C6B10.243.2

我认为它可能是特殊字符,但它看起来并不像。我的第二个猜测是路径的长度存在限制。

所以我的问题是,如果路径有限制或是否存在其他问题?

谢谢

3 个答案:

答案 0 :(得分:4)

这是某种弹簧约定,它将最后一个点之后的所有内容视为文件扩展名并将其删除。您可以简单地尝试在请求映射和请求中添加尾随/。 即REST_PREFIX + "/{key}/"

如果您不是调用API的人,请查看更复杂但更好的解决方案,请参阅this question

答案 1 :(得分:0)

必须是enum PtzAction : Int { case up = 1, down, left, right, zoomIn, zoomOut } enum PtzButton: Int { case play = 1, up, stop, left, none, right, zoomIn, down, zoomOut static let actionRawValues = [0, 1, 0, 3, 0, 4, 5, 2, 6] } let button = PtzButton.down let actionRaw = PtzButton.actionRawValues[button.rawValue - 1] // zero based index if let action = PtzAction(rawValue: actionRaw) { print(action.rawValue) } 中未获得URL编码的哈希#字符。而且,由于URL中key之后的任何内容都代表HTML页面的不同片段,因此它永远不会被发送到服务器。

在我的#上使用javascript' encodeURIComponent()

key

请注意,67E4D2C089CBCCA2A9732F6986124C6B10.243.2.107%230EEE5EAB06ED4FFF82A8934F7058860C%2379A2F0C170A028A3B0410F0F16303F41字符现已编码。试试这个,但您可能需要在服务器上解码它。

答案 2 :(得分:0)

#字符在网址中具有特殊含义。它是一个片段标识符,用于跳转到页面的某个部分(而不是在顶部着陆)。为避免这种情况,请将字符编码为%23