2015-05-31 5 views
1

Я использую указанный ниже URL-адрес для отправки запроса, но я получаю ошибку 404. с предупреждением на сервере: отображение не найдено для запроса HTTP с URISpring MVC: URI не работает

URI, является

http://localhost:8080/webstore/products/tablet/price;low=200;high=400?manufacturer= "Google"

метод в контроллере используется

@RequestMapping(value="/products/{category}/{ByCriteria}",method=RequestMethod.GET) 
public String getSpecificProductByFilter(@PathVariable("category")String ProductCategory,@MatrixVariable(pathVar= "ByCriteria") Map<String,List<Long>> filterParams,@RequestParam String manufacturer,Model model){ 
    model.addAttribute("products",productService.getfilterproducts(ProductCategory,filterParams, manufacturer)); 
    return "products"; 
} 

Категория означает «таблетку» в URI

Критерии означают «низкий» и «высокий»

производитель «Google»

+0

Ваше сопоставление, если для '/ product/...', но ваш фактический путь -'/products/...'. Весной этого не будет волнообразно проигнорировано это '' '. –

+0

@JBNizet Я изменил путь соответственно, но я столкнулся с той же проблемой, с которой я столкнулся раньше –

+0

Можете ли вы опубликовать web.xml? –

ответ

1

Для тех, кто не знает, это из книги «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

Для полного решения вы должны сделать следующие шаги:

  1. в вашем хранилище и сервисных интерфейсов и классов написать метод:

    List<Product> getProductsByManufacturer(String manufacturer);

    и реализовать его в так же, как вы написали метод GetProductsByCategory.

  2. В репозиториев и сервисных интерфейсов и классов написать метод:

    Set<Product> getProductsByPrice(Map<String, List<String>> priceParams);

    и реализовать его таким же образом, как вы написали метод getProductsByFilter.

  3. метод записи 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, я буду комментировать там код для вас, но он почти такой же, как и другие методы, как я уже сказал. Надеюсь, что это поможет кому-то.

+0

Я читаю ту же книгу, и я хотел бы поблагодарить вас за вашу помощь! –

Смежные вопросы