spring - 我无法在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这样简单的方式给出请求
解决方案
看起来你正在寻找一个@PathVariable
正如 JB Nizet 所链接,您可以在 Spring 的文档中找到它:
这很简单:
@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) {
// ...
}
}
您也可以使用枚举而不是字符串来更好地满足您的需求。
推荐阅读
- python - 如何在 python 上打印列表?
- entity-framework - 无法使用 Core 3.0 ASP.NET 运行 ef 命令
- spring - spring boot 2.2.1 RELEASE中如何使用listener-class
- azure - 如何确定影响我的特定 url 的 Azure WAF 规则
- azure - 在 Azure 中运行和共享 jupyter notebook 的解决方案
- php - 在laravel(cyber-duck)中插入来自excel(xlsm,xls)的数据
- python - 使用 multiprocessing.Pool 时 Python 核心使用速度较慢/低于 100%
- python - “...”是什么意思以及...和传入python之间的区别?
- python - 从模式重复的 Python 列表中删除重复字符
- firebase - Firebase 托管静态文件服务非常慢