Как Spring MVC @PathVariable получает параметры с несколькими символами '/'? - PullRequest
0 голосов
/ 06 ноября 2018

Я работал над виджетом загрузки файлов для управления изображениями.

Мне бы хотелось, чтобы пути к изображениям можно было получать через @PathVariable в Spring MVC, например, http://localhost:8080/show/img/20181106/sample.jpg вместо http://localhost:8080/show?imagePath=/img/20181106/sample.jpg.

Но / будет разрешен Spring MVC, и он всегда будет возвращать 404 при доступе.

Есть ли хороший способ обойти это?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Извините, что говорю, но я думаю, что ответ @Alien не отвечает на вопрос: он обрабатывает только случай точки . в @PathVariable, но не слеш /.

У меня была проблема однажды, и вот как я ее решил, это не очень элегантно, но все еще хорошо, я думаю:

private AntPathMatcher antPathMatcher = new AntPathMatcher();

@GetMapping("/show/**")
public ... image(HttpServletRequest request) {
    String uri = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
    String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
    String path = antPathMatcher.extractPathWithinPattern(pattern, uri);

    ...
}
0 голосов
/ 06 ноября 2018

Вы можете использовать как ниже.

@RequestMapping(value = "/show/{path:.+}", method = RequestMethod.GET)
public File getImage(@PathVariable String path) {
        // logic goes here
}

Здесь .+ - это соответствие регулярному выражению, оно не будет обрезать .jpg на вашем пути.

...