基于注解的springMVC使用总结

来源:互联网 发布:矩阵中r(a)是什么意思 编辑:程序博客网 时间:2024/06/05 07:42

参考: http://blog.csdn.net/chjttony/article/details/6286144


Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。总结如下:

1、  在经典的三层结构上分别添加注解符号(@Repository、@Service、@Controller),在需要自动注入的地方添加注解符号@Autowired。这样spring的自动扫描机制,就会扫描这样带注解符号的类,实现自动注入。

 

2、  由于没有使用struts2,就不需要再action中接收参数时,定义成员变量privateString XXX,定义getXXX(),setXXX()。

3、  与struts2+spring+ibatis框架比较,开发起来更方便,不需要在xml文件中做其它的配置。

4、可见,使用基于注解的springMVC框架,可以减少很大的开发工作,提高了开发效率。由于,没有繁琐的配置文件,也方便了以后的维护工作。

 

 

 

一、传递不用类型的参数例子

1、  参数为普通类型

 

/** * 新闻发布,根据id,查找对象 * @author chen_zhenyu * @param newsId * @return */@RequestMapping(value="/getById")@ResponseBodypublic EcNews getById(Integer newsId){return newsService.getById(newsId);}


 


 

2、  参数为对象

 

/** * 新闻发布,修改 * @author chen_zhenyu * @param ecNews */@RequestMapping(value="/update")@ResponseBodypublic String updateEcNews(HttpServletRequest request,EcNews ecNews){Integer userId = (Integer) request.getSession().getAttribute("userId");String currentTime = DateUtils.longToDateAll(System.currentTimeMillis());ecNews.setEditTime(currentTime);ecNews.setEditUserId(userId);newsService.updateEcNews(ecNews);return "ok";}



 

3、参数为列表

如果参数为列表,需要转换为json格式的字符串,作为普通类型的参数传递。

 

二、返回不用类型的值例子(返回格式为json)

1、  返回值类型为普通类型

 

/** * 新闻发布,修改 * @author chen_zhenyu * @param ecNews */@RequestMapping(value="/update")@ResponseBodypublic String updateEcNews(HttpServletRequest request,EcNews ecNews){Integer userId = (Integer) request.getSession().getAttribute("userId");String currentTime = DateUtils.longToDateAll(System.currentTimeMillis());ecNews.setEditTime(currentTime);ecNews.setEditUserId(userId);newsService.updateEcNews(ecNews);return "ok";}


 


 

2、 返回值类型为对象

 

/** * 新闻发布,根据id,查找对象 * @author chen_zhenyu * @param newsId * @return */@RequestMapping(value="/getById")@ResponseBodypublic EcNews getById(Integer newsId){return newsService.getById(newsId);}



 

 

3、返回值类型为列表

 

/** * 生成新闻类别下拉框 * @return */@RequestMapping(value="/getNewsTypeList")@ResponseBodypublic List<Object>  getNewsTypeList(){return newsService.findNewsTypeList();}



 

三、返回不同类型的值例子(非json格式返回)

1、  返回值类型为对象

 

/** * 我的订单详细 * @param request * @param orderId * @return */@RequestMapping(value="/myec/orderDetail/{orderId}")public String getOrderDetail(HttpServletRequest request, @PathVariable String orderId) {Integer customerId = (Integer) request.getSession().getAttribute("userId");OrderInfo orderInfo = new OrderInfo(); orderInfo.setCustomerId(customerId);orderInfo.setOrderId(Integer.parseInt(orderId));try {//订单基本信息OrderInfo orderDetail = orderService.getOrderDetail(orderInfo);request.setAttribute("order", orderDetail);//订单商品信息List<OrderItem>  orderItemList = orderService.getOrderItemList(Integer.parseInt(orderId));request.setAttribute("orderItem", orderItemList);//配送信息List<OrderDelivery> orderDeliveryList = orderService.getOrderDeliveryList(Integer.parseInt(orderId));request.setAttribute("deliveryList", orderDeliveryList);} catch (Exception e) {e.printStackTrace();return returnErrorCode("404");}return "/jsp/shop/order_details.jsp";}



 

2、 返回值类型为列表

/** * 我的订单 * @param request * @param page * @return */@RequestMapping(value="/myec/orderlist/{page}")public String getOrderList(HttpServletRequest request, @PathVariable String page) {Integer customerId = (Integer) request.getSession().getAttribute("userId");OrderInfo orderInfo = new OrderInfo(); orderInfo.setCustomerId(customerId);orderInfo.setStrOrderId(request.getParameter("orderId"));orderInfo.setCommitTimeBg(request.getParameter("commitTimeBg"));orderInfo.setCommitTimeEd(request.getParameter("commitTimeEd"));try {Pagination pagination = getPagination(page);if(pagination.getPage() == 0)pagination.setPage(1);if(request.getParameter("pageSize") != null){pagination.setPageSize(Integer.valueOf(request.getParameter("pageSize")));}pagination = orderService.getOrderList(orderInfo, pagination);request.setAttribute("pagination", pagination);} catch (Exception e) {e.printStackTrace();return returnErrorCode("404");}return "/jsp/shop/order_list.jsp";}


 

四、其它说明

1、  从访问路径中,获取参数

 

/** * 我的订单详细 * @param request * @param orderId * @return */@RequestMapping(value="/myec/orderDetail/{orderId}")public String getOrderDetail(HttpServletRequest request, @PathVariable String orderId) {Integer customerId = (Integer) request.getSession().getAttribute("userId");OrderInfo orderInfo = new OrderInfo(); orderInfo.setCustomerId(customerId);orderInfo.setOrderId(Integer.parseInt(orderId));try {//订单基本信息OrderInfo orderDetail = orderService.getOrderDetail(orderInfo);request.setAttribute("order", orderDetail);//订单商品信息List<OrderItem>  orderItemList = orderService.getOrderItemList(Integer.parseInt(orderId));request.setAttribute("orderItem", orderItemList);//配送信息List<OrderDelivery> orderDeliveryList = orderService.getOrderDeliveryList(Integer.parseInt(orderId));request.setAttribute("deliveryList", orderDeliveryList);} catch (Exception e) {e.printStackTrace();return returnErrorCode("404");}return "/jsp/shop/order_details.jsp";}



 

2、可以规定请求的方式

 

/** * 更新会员资料 * @param request * @param customer * @return * @throws Exception */@RequestMapping(value="/myec/customerinfo-update",method=RequestMethod.POST)public String updateCustomer(HttpServletRequest request,EcCustomer ecCustomer)throws Exception{ecCustomer.setEditTime(DateUtils.getCurrentDateString());ecCustomerService.updateEcCustomer(ecCustomer);Integer customerId = (Integer)request.getSession().getAttribute("userId");EcCustomer customer=shoppingCartService.getCustomerListById(customerId);request.setAttribute("customer", customer);request.setAttribute("rtMsg", "会员信息修改成功!");return "/jsp/myec/edit_members_info.jsp";}


 


 

五、注解符号说明

1、@Repository,用来标识数据访问层组件,即需要在dao实现类上添加该注解符号。

2、@Service,用来标识业务层组件,即需要在service实现类上添加该注解符号。

3、@Controller,用来标识控制层组件,即需要action类上添加该注解符号。

4、@Autowired,当action层需要调用serivice层方法,或service层需要调用dao层方法时,添加该注解符号,即可。

5、@RequestMapping(value="/ecNews"),用来在Action类中定义访问的映射关系。

6、@ResponseBody,表示把返回值存放到httpResponseBody中返回。

7@PathVariable,表示访问地址参数的映射关系。

8@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。该注解一般不使用。

 

0 0