当前位置: 首页 > 知识库问答 >
问题:

发送Kotlin Spring映射中包含斜线的路径

危裕
2023-03-14

在科特林泉处理控制器映射中的斜杠时遇到问题。我的客户端应用程序发送一个绝对路径(“C:/用户/文档/FolderX”),并应接收路径文件夹的内容。

请求应该如下所示:http://localhost:8080/api/files/C:/User/Documents/FolderX

我想单独访问路径/字符串“C:/User/Documents/FolderX”。

起初尝试过这个:

@RestController
@RequestMapping("api/files")
class FileController(private val service: FileService)
{
    @GetMapping("/{path:.*}")
    fun retrieveFiles(@PathVariable path: String): MutableList<xFile> = service.retrieveFiles(path)
}

这给出了错误代码404

然后尝试这个:

@RestController
@RequestMapping("api/files")
class FileController(private val service: FileService)
{
    @GetMapping("/**")
    fun retrieveFiles(@PathVariable path: String, request: HttpServletRequest): MutableList<xFile>
    {
        val thePath = request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE).toString();
        val bestMatchingPattern = request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE).toString();

        val arguments = AntPathMatcher().extractPathWithinPattern(bestMatchingPattern, thePath)

        val moduleName: String

        if (!arguments.isEmpty())
        {
            moduleName = (path + '/') + arguments
        }
        else
        {
            moduleName = path
        }

        return service.retrieveFiles(moduleName)
    }
}

这给出了此错误(代码 500):

resolved[org . spring framework . web . bind . missingpathpavariableexception:方法参数类型字符串所需的URI模板变量“path”不存在]

共有1个答案

施选
2023-03-14

使用base64编码/解码,我能够让它正常工作。

@RestController
@RequestMapping("api/files")
class FileController(private val service: FileService)
{
    @GetMapping("/{encodedPath}")
    fun retrieveFiles(@PathVariable encodedPath: String): MutableList<xFile>
    {
        val decodedBytes = Base64.getDecoder().decode(encodedPath)
        val decodedString = String(decodedBytes)

        return service.retrieveFiles(decodedString)
    }
}

然后,我们只需在decodedString上使用拆分或子字符串来获得所需的路径部分!

 类似资料:
  • 我一直试图通过一个名为Guardian的中间类映射两个用户之间的一些“OneToOne”关系。当我试图检索一个用户(和他的监护人)时,从Glassfish(Open edition V4.0)返回一个内部服务器错误。但是,日志中没有显示任何类型的堆栈跟踪或任何错误。我怀疑问题是我在JPA类中的映射。 启动服务器时,我得到两个与Guardian类有关的警告,但我并不真正理解: 警告:映射到元素[me

  • 问题内容: 我有这个REST资源: 例如,param可以包含斜杠字符:。 很明显,我在用它来调用它,但是不起作用。 我也尝试过使用,将斜杠编码为,但也不起作用,它也不会到达端点。 编辑 我正在使用Retrofit来调用端点,并且这样做: 使用,但仍然无法正常工作。 问题答案: 保留字符(例如和)必须经过URL编码。 编码为 编码为 尝试。 在RFC 3986个 定义了以下一组保留的字符可被用作分隔

  • 我正在使用JPA编写一个Java EE应用程序,它需要国际化。为此,我创建了一个名为multilingarstring的类,该类将语言与字符串相关联(并扩展了HashMap 现在,假设我们有一个实体,它根据语言的不同有不同的名称: 此代码生成以下数据库模式: 这几乎是好事。 此实现的问题是重复字段上的和方法上的(每次需要在数据库BTW中映射时都必须重新编写:每个实体类至少1个)。在我看来,它使代码

  • 我使用http://jsonlint.com来验证JSON是否有效。因此,我要么需要更改JSON或代码,要么可能两者都需要。有什么想法吗?

  • 问题内容: 我想定义一个带有参数的路由,该参数将包含一个斜线字符,例如参数在哪里。 如何防止Laravel读取斜线作为下一个route参数的分隔符?因此,我现在有了。 问题答案: 将下面的全部路线添加到您的底部,并记住之后再运行。注意,使用“-> where”来指定参数的可能内容,从而使您能够使用包含斜杠的参数。 而且比起在控制器中,您只需像平常一样处理数据(就像它不包含斜杠一样)。 这应该为您工

  • 这是我的哈希图: 如何获得一个新的,它将包含每个客户的汽车数量,即的大小? 我想这样做没有循环,但只使用流。 我的尝试: