java - Spring Boot 中的 @PathVariable 在 URL 中带有斜杠

标签 java rest url spring-boot path-variables

我必须在 SpringBoot 应用程序中使用 @PathValiable 从 URL 获取参数。这些参数通常有斜线。我无法控制用户在 URL 中输入的内容,因此我想获取他输入的内容,然后我可以处理它。

我已经在这里查看了 Material 和答案,我认为对我来说好的解决方案不是要求用户以某种方式对输入的参数进行编码。

SpringBoot代码很简单:

@RequestMapping("/modules/{moduleName}")
@ResponseBody
public String moduleStrings (@PathVariable("moduleName") String moduleName) throws Exception {

  ...

}

因此,例如 URL 如下:

http://localhost:3000/modules/...

问题是参数 moduleName 通常有斜杠。 例如,

metadata-api\cb-metadata-services OR
app-customization-service-impl\\modules\\expand-link-schemes\\common\\app-customization-service-api

因此用户肯定可以输入:

http://localhost:3000/modules/metadata-api\cb-metadata-services

是否可以获取用户在 URL 中 /modules/ 之后输入的所有内容?

如果有人告诉我处理此类问题的好方法是什么。

最佳答案

根据 P.J.Meisch 的回答,我为我的案例找到了简单的解决方案。它还允许考虑 URL 参数中的几个斜线。它也不允许像以前的答案那样使用反斜杠。

@RequestMapping(value = "/modules/**", method = RequestMethod.GET)
@ResponseBody
public String moduleStrings(HttpServletRequest request) {

    String requestURL = request.getRequestURL().toString();

    String moduleName = requestURL.split("/modules/")[1];

    return "module name is: " + moduleName;

}

关于java - Spring Boot 中的 @PathVariable 在 URL 中带有斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43470421/

相关文章:

java - 在 JAX-RS 中将 JSON 解码为 Java POJO

android - 如何获取自定义网址

没有 gc 的 Java - io

java - Spring MVC Controller 继承和路由

java - 日期格式

java - Java 应用程序中的 Jersey restful web 服务使用 Postman 插件发送复杂对象进行测试

java - 带有查询参数的 Jersey DELETE 请求

java - 如何使用 Jersey (Java) 通过 Rest API 上传 csv 文件?

ios - 如何将图像从我的应用程序分享到 Instagram

http - URL 过期概念的优缺点