Для тех, кто не знает, это из книги «Spring MVC начинающих руководство» по Amuthan G. Этот вопрос действительно старый, но я дам там свое решение только в случае, если кто-то собирается это нужно, как и сегодня.
Прежде всего, ваш @RequestMapping ошибочен. Он должен выглядеть следующим образом:
@RequestMapping(value="/{category}/{ByCriteria}", method=RequestMethod.GET)
И причина в том, у вас уже есть @RequestMapping("/products")
на всем этом классе контроллера (выше вашего объявления класса). И потому, что вы хотите нанести webstore/products/tablet
и NOTwebstore/products/products/tablet
у вас должно быть Оставьте, что отображение «товаров» из этого метода.
Вторая вещь - ваш URI. Я знаю, что в книгах есть эта и ее не очень большая сделка, но если вы не хотите иметь проблемы, оставьте кавычки рядом со словом Google. Это потому, что вы не хотите иметь ценность «Google», а просто Google без этих кавычек, и если вы позволите им там, у вас будут проблемы со сравнением значений. Таким образом, ваш URI должен выглядеть так.
http://localhost:8080/webstore/products/tablet/price;low=200;high=400?manufacturer=Google
Для полного решения вы должны сделать следующие шаги:
в вашем хранилище и сервисных интерфейсов и классов написать метод:
List<Product> getProductsByManufacturer(String manufacturer);
и реализовать его в так же, как вы написали метод GetProductsByCategory
.
В репозиториев и сервисных интерфейсов и классов написать метод:
Set<Product> getProductsByPrice(Map<String, List<String>> priceParams);
и реализовать его таким же образом, как вы написали метод getProductsByFilter
.
метод записи Finnaly в классе контроллера:
@RequestMapping("/{category}/{ByPrice}")
public String filterProducts(@PathVariable("category") String productCategory,
@MatrixVariable(pathVar = "ByPrice") Map<String, List<String>> filterParams,
@RequestParam String manufacturer, Model model) {
List<Product> byCategory = productService.getProductsByCategory(productCategory);
List<Product> byManufacturer = productService.getProductsByManufacturer(manufacturer);
Set<Product> byPrice = productService.getProductsByPrice(filterParams);
byCategory.retainAll(byManufacturer);
byCategory.retainAll(byPrice);
model.addAttribute("products", byCategory);
return "products";
}
В моем проекте этот способ выглядеть, но вы, конечно, можете сделать это в более короткий путь. После выполнения этих шагов ваш проект должен работать. Если нет, не стесняйтесь спрашивать меня. Если вы не знаете, как писать методы в шагах 1 и 2, я буду комментировать там код для вас, но он почти такой же, как и другие методы, как я уже сказал. Надеюсь, что это поможет кому-то.
Ваше сопоставление, если для '/ product/...', но ваш фактический путь -'/products/...'. Весной этого не будет волнообразно проигнорировано это '' '. –
@JBNizet Я изменил путь соответственно, но я столкнулся с той же проблемой, с которой я столкнулся раньше –
Можете ли вы опубликовать web.xml? –