java 在Spring MVC中将文件路径作为@PathVariable发送

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/38450953/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 03:25:05  来源:igfitidea点击:

Send file path as @PathVariable in Spring MVC

javarestspring-mvc

提问by J-Alex

There is a task to pass file path as @PathVariablein Spring MVC to REST Service with GETrequest.

有一项任务是将文件路径与@PathVariableSpring MVC 中的文件路径一起传递给带有GET请求的REST 服务。

We can easily do it with POSTsending String of file path in JSON.

我们可以POST通过在 JSON 中发送文件路径的字符串轻松做到这一点。

How we can do with GETrequest and @Controllerlike this?

我们如何处理GET请求并@Controller像这样?

@RequestMapping(value = "/getFile", method = RequestMethod.GET)
public File getFile(@PathVariable String path) {
    // do something
}

Request:

要求:

GET /file/getFile/"/Users/user/someSourceFolder/8.jpeg"
Content-Type: application/json

采纳答案by Byeon0gam

Ok. you use to get pattern. sending get pattern url.

行。你用来获取模式。发送获取模式网址。

Use @RequestParam.

使用@RequestParam。

@RequestMapping(value = "/getFile", method = RequestMethod.GET)
public File getFile(@RequestParam("path") String path) {
    // do something
}

and if you use @PathVariable.

如果你使用@PathVariable。

@RequestMapping(value = "/getFile/{path}", method = RequestMethod.POST)
public File getFile(@PathVariable String path) {
    // do something
}

回答by Blank

You should define your controller like this:

你应该像这样定义你的控制器:

@RequestMapping(value = "/getFile/{path:.+}", method = RequestMethod.GET)
public File getFile(@PathVariable String path) {
    // do something
}

回答by N. Chicoine

What I did works with relative paths to download/upload files in Spring.

我所做的是使用相对路径在 Spring 中下载/上传文件。

@RequestMapping(method = RequestMethod.GET, path = "/files/**")
@NotNull
public RepositoryFile get(@PathVariable final String repositoryId, 
        @PathVariable final String branchName,
        @RequestParam final String authorEmail, 
        HttpServletRequest request) {
    String filePath = extractFilePath(request);
    ....
}

And the utilitary function I created within the controller :

我在控制器中创建的实用函数:

private static String extractFilePath(HttpServletRequest request) {
        String path = (String) request.getAttribute(
                HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
        String bestMatchPattern = (String) request.getAttribute(
                HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
        AntPathMatcher apm = new AntPathMatcher(); 
        return apm.extractPathWithinPattern(bestMatchPattern, path);
    }