我无法在spring mvc中将不同的url映射到同一个控制器

时间:2018-06-03 16:19:29

标签: spring

我已经堆叠了很少的问题,但没有得到我的解决方案。
我有不同的品牌列表,我想映射到一个控制器,以便我可以检索各个品牌的所有产品并在jsp中显示它们。
JSP
--------

div id="sportswear" class="panel-collapse collapse">
 <div class="panel-body">
                     <ul>
                                <li><a href="brands.htm/nokia">Nokia </a></li>
                                <li><a href="brands.htm/apple">Apple </a></li>
                                <li><a href="brands.htm/xaomi">Xaomi </a></li>
                                <li><a href="brands.htm/motorola">Motorola</a></li>
                                <li><a href="brands.htm/samsung">Samsung </a></li>
                    </ul>
 </div>

控制器
---------------

@Controller
@RequestMapping(value= {"/brands.htm"})
public class ShowBrandsProducts {
    @Autowired
    private ECommerceService service;

    public String getPage() {
        return "shop";
    }

    @RequestMapping(name="/nokia")
    public String getNokia(Model model) {
        List<DisplayFeatureProducts> displayList= null;
        List<FeaturedItemsObject> listFeature= new ArrayList<>();
        ByteToImage big= null;

        try {
            //getting all nokia products
            displayList= service.getProductFromBrand("nokia");
        } catch (HibernateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch(Exception ee) {
            ee.printStackTrace();
        }

        displayList.forEach(dl->{
            //getting the products from displayList
            FeaturedItemsObject fio= new FeaturedItemsObject();
            fio.setId(dl.getId());
            fio.setName(dl.getName());
            fio.setPrice(dl.getPrice());
            String encoded= big.convertByteToImage(dl.getImage());
            fio.setEncodedImage(encoded);
            //adding the products to listFeature to List 
            listFeature.add(fio);
        });

        model.addAttribute("brand", listFeature);
        return "shop";
    }

}

如果我将 @Requestparam(params = {&#34; id = nokia&#34;})
置于此方法之上,我会得到一个解决方案 public String getNokia(Model model)并传递网址,如 / brands?id = nokia ,它的工作正常。
但我想提出的请求不仅仅是id,而是像 /brands.htm/nokia

1 个答案:

答案 0 :(得分:0)

您似乎正在寻找@PathVariable

由JB Nizet链接,您可以在Spring的文档中找到它:

https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-requestmapping

这很简单:

@RestController
@RequestMapping("/persons")
class PersonController {

    @GetMapping("/{id}")
    public Person getPerson(@PathVariable Long id) {
        // ...
    }
}

您希望对自己的品牌做同样的事情。 例如:

@RestController
@RequestMapping("/brands.htm")
class BrandsController {

    @GetMapping("/{brand}")
    public Model getModelFromBrand(@PathVariable String brand) {
        // ...
    }
}

您也可以使用枚举而不是字符串来更好地满足您的需求。