首页 > 解决方案 > 我无法在spring mvc中将不同的url映射到同一个控制器

问题描述

我已经有几个问题了,但没有得到我的解决方案。
我有不同的品牌列表,我想将其映射到一个控制器,以便我可以检索各个品牌的所有产品并在 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 = {"id=nokia"})
放在此方法上方 public String getNokia(Model model)并传递像/brands?id=nokia这样的 url,我有一个溶胶,它工作正常。
但我想通过 id 而不是像/brands.htm/nokia这样简单的方式给出请求

标签: spring

解决方案


看起来你正在寻找一个@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) {
        // ...
    }
}

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


推荐阅读