Shopping Without Vision 的 project 终于告一段落,teamwork 非常给力,中间也遇到很多困难,还好都一起克服了。这是做的第二个 Spring MVC 项目了,对这个框架在很多细节上又多了些深入的理解。这篇文章想总结一下关于 controller 中我们用到的几个注解。
@Controller
Controller 是 MVC 中的 C —— 控制层,如果不基于注解,该类需要继承 CommandController,如果基于注解,只需要在类名前加上注解 @Controller,这样当服务器启动时,spring 会自动扫描所有包,扫描到带有这个注解的类,spring 会告诉服务器,这是一个 controller,它可以接收和处理来自用户的请求。
@RequestMapping
假设请求的 URL 是: http://localhost:8080/项目名/xxx,这时在所有的 controller 中,根据 “xxx” 寻找处理请求的方法。所以我们只需要在用作 controller 的类里面可以处理请求的对应方法前加上注释,例如:
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String addProduct(Model model) {
Product product = new Product();
List<Category> categories = categoryService.getCurrent();
model.addAttribute("categories", categories);
model.addAttribute("product", product);
return "addProduct";
}
方法最后 return 的字符串,就是对应的 view 页面。
@ModelAttribute
该注解有两种用法,一种是注释方法,另一种是注释参数,我们用在第二种情况,示例代码:
@RequestMapping(value="/adding",method=RequestMethod.POST)
publicStringaddingProduct(@Valid@ModelAttribute("product")Productproduct,
HttpServletRequestrequest,Modelmodel){
System.out.println(product.getCategory().getCid());
System.out.println("product is"+product);
productDaoImp.insert(product);
List<Product>plist=productDaoImp.getProducts();
model.addAttribute("plist",plist);
List<Category>categories=categoryService.getCurrent();
model.addAttribute("categories",categories);
return"products";
}
@ModelAttribue 前的 @Valid 用来进行数据的校验。由于此处没有用到 @SessionAttributes,所以 product 的 scope 为 request,否则就是 session。在这个例子里,@ ModelAttribute (“product”) Product product 的作用是将绑定的命令对象以 “product” 为名称,又将 “plist” 和 “categories” 添加到模型对象中,供视图页面 (view) 展示使用。我们可以在视图页面使用 {plist.xxx} 和 ${categories.xxx} 来获取绑定的命令对象的属性。
@PathVariable
如果请求路径上有 id 变量值,可以通过 @PathVariable 来获取,如:
@RequestMapping(value="/{productId}/delete",method=RequestMethod.GET)
publicStringdeleting(@PathVariableintproductId,HttpServletRequestrequest,Modelmodel){
Productproduct=productDaoImp.findById(productId);
productDaoImp.delete(product);
List<Product>plist=productDaoImp.getProducts();
model.addAttribute("plist",plist);
List<Category>categories=categoryService.getCurrent();
model.addAttribute("categories",categories);
return"products";
}
欢迎关注我的知乎专栏【数据池塘】,专注于分享机器学习、数据挖掘干货:https://zhuanlan.zhihu.com/datapool
⬇️ 微信公众号 ⬇️