Spring MVC 常用注解之 Controller 篇

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

该注解有两种用法,一种是注释方法,另一种是注释参数,我们用在第二种情况,示例代码:

扫描二维码关注公众号,回复: 9145979 查看本文章

 

@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

⬇️ 微信公众号 ⬇️

发布了38 篇原创文章 · 获赞 23 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/cyan_soul/article/details/79234859