Я работал над виджетом загрузки файлов для управления изображениями.
Я хочу, чтобы пути к изображениям можно было получать через @PathVariable в Spring MVC, например http://localhost:8080/show/img/20181106/sample.jpg вместо http://localhost:8080/show?imagePath=/img/20181106/sample.jpg.
Но / будет разрешен Spring MVC, и он всегда будет возвращать 404 при доступе.
Есть ли хороший способ обойти это?
Если в / несколько imagePath, этот формат все равно возвращает 404.




Вы можете использовать, как показано ниже.
@RequestMapping(value = "/show/{path:.+}", method = RequestMethod.GET)
public File getImage(@PathVariable String path) {
// logic goes here
}
Здесь .+ - это совпадение с регулярным выражением, оно не будет обрезать .jpg на вашем пути.
Извините за это, но я думаю, что ответ @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);
...
}
вы должны использовать этот формат для
RequestMappinghttp://localhost:8080/show/{imagePath:.+}