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

时间:2016-07-19 06:25:47

标签: java rest spring-mvc

有一项任务是在Spring MVC中将文件路径作为@PathVariable传递给具有GET请求的REST服务。

我们可以使用POST在JSON中发送文件路径字符串来轻松完成。

我们如何处理GET请求以及此类@Controller

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

请求:

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

确定。 你用来获得模式。 发送get pattern url。

使用@RequestParam。

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

如果您使用@PathVariable。

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

答案 2 :(得分:1)

我所做的工作与在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);
    ....
}

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

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