Отправьте путь к файлу как @PathVariable в Spring MVC

java rest spring-mvc

11645 просмотра

3 ответа

4648 Репутация автора

Есть задача передать путь к файлу как @PathVariableв Spring MVC в REST Service с GETзапросом.

Мы можем легко сделать это, 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
Автор: J-Alex Источник Размещён: 19.07.2016 06:25

Ответы (3)


4 плюса

11485 Репутация автора

Вы должны определить свой контроллер следующим образом:

@RequestMapping(value = "/getFile/{path:.+}", method = RequestMethod.GET)
public File getFile(@PathVariable String path) {
    // do something
}
Автор: Blank Размещён: 19.07.2016 06:58

1 плюс

675 Репутация автора

Решение

Хорошо. Вы используете, чтобы получить шаблон. отправка получить шаблон 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
}
Автор: Byeon0gam Размещён: 19.07.2016 06:58

1 плюс

11 Репутация автора

То, что я сделал, работает с относительными путями для загрузки / выгрузки файлов в 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);
    }
Автор: N. Chicoine Размещён: 08.08.2017 01:54
32x32