实战SSM_O2O商铺_19【商铺编辑】Controller层开发
生活随笔
收集整理的這篇文章主要介紹了
实战SSM_O2O商铺_19【商铺编辑】Controller层开发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 概述
- ShopController
- ShopController#getShopInfoById方法
- getShopInfoById
- 測試
- ShopController#modifyShop方法
- 注冊商鋪的session部分的完善
- Github地址
概述
按照需求設計,我們希望商鋪管理者
-
店鋪名稱不能修改
-
店鋪類別不能修改
-
其余信息可編輯修改
分為兩步,
- 第一步前端傳入shopId到后臺獲取商鋪信息,前端展示
- 第二步修改商鋪信息,提交到后臺,更新商鋪
ShopController
com.artisan.o2o.web.shopadmin.ShopController.java
ShopController#getShopInfoById方法
getShopInfoById
/*** * * @Title: getShopInfoById* * @Description: 根據shopId獲取shop信息, 接收前端的請求,獲取shopId ,所以入參為HttpServletRequest* @ResponseBody 不需要VIEW展現層模塊,直接顯示到客戶端的內容。 將內容或對象作為 HTTP 響應正文返回* * @param request* * @return: Map<String,Object>*/@RequestMapping(value = "/getshopinfobyId", method = RequestMethod.GET)@ResponseBodypublic Map<String, Object> getShopInfoById(HttpServletRequest request) {Map<String, Object> modelMap = new HashMap<String, Object>();// shopId 為和前端約定好的變量int shopId = HttPServletRequestUtil.getInt(request, "shopId");try {if (shopId >= 0) {// 查詢 ,按照設計,我們希望前端頁面下拉列表中可以修改區域信息,所以需要查詢出來全量的區域列表// 對已ShopCategory而言,我們DAO層的SQL已經將shop_category_id和// shop_category_name 查詢出來,前端設置到對應的屬性上即可。沒有必要全部查詢出來。Shop shop = shopService.getShopById(shopId);List<Area> areaList = areaservice.getAreaList();modelMap.put("success", true);modelMap.put("shop", shop);modelMap.put("areaList", areaList);} else {modelMap.put("success", false);modelMap.put("errMsg", "shopId不合法");}} catch (Exception e) {modelMap.put("success", false);modelMap.put("errMsg", e.getMessage());}return modelMap;}測試
啟動tomcat,訪問 http://localhost:8080/o2o/shopadmin/getshopinfobyId?shopId=30
返回的數據如下:
{"shop": {"shopId": 30,"shopName": "優樂美","shopDesc": "優樂美奶茶店","shopAddr": "復興街","phone": "123456","shopImg": "\\upload\\item\\shopImage\\30\\2018053001010899137.png","priority": null,"createTime": 1527656467000,"lastEditTime": 1527656467000,"enableStatus": 0,"advice": null,"owner": null,"area": {"areaId": 1,"areaName": "北京","areaDesc": null,"priority": null,"createTime": null,"lastEditTime": null},"shopCategory": {"shopCategoryId": 3,"shopCategoryName": "奶茶","shopCategoryDesc": null,"shopCategoryImg": null,"priority": null,"createTime": null,"lastEditTime": null,"parent": null}},"success": true,"areaList": [{"areaId": 2,"areaName": "上海","areaDesc": "魔都","priority": 99,"createTime": 1526259636000,"lastEditTime": 1526346041000},{"areaId": 1,"areaName": "北京","areaDesc": "帝都","priority": 0,"createTime": 1526259626000,"lastEditTime": 1526346033000}] }檢查數據,符合預期。
ShopController#modifyShop方法
/*** * * @Title: modifyshop* * @Description:* * @param request* 因為是接收前端的請求,而前端的信息都封裝在HttpServletRequest中,* 所以需要解析HttpServletRequest,獲取必要的參數* * 1. 接收并轉換相應的參數,包括shop信息和圖片信息 2.修改店鋪 3. 返回結果給前臺* @return* * @return: Map<String,Object>*/@RequestMapping(value = "/modifyshop", method = RequestMethod.POST)@ResponseBodypublic Map<String, Object> modifyshop(HttpServletRequest request) {Map<String, Object> modelMap = new HashMap<String, Object>();// 0. 驗證碼校驗if (!VerifyCodeUtil.verifyCode(request)) {modelMap.put("success", false);modelMap.put("errMsg", "驗證碼不正確");return modelMap;}// 1. 接收并轉換相應的參數,包括shop信息和圖片信息// 1.1 shop信息// shopStr 是和前端約定好的參數值,后端從request中獲取request這個值來獲取shop的信息String shopStr = HttPServletRequestUtil.getString(request, "shopStr");// 使用jackson-databind 將json轉換為pojoObjectMapper mapper = new ObjectMapper();Shop shop = null;try {// 將json轉換為pojoshop = mapper.readValue(shopStr, Shop.class);} catch (Exception e) {e.printStackTrace();// 將錯誤信息返回給前臺modelMap.put("success", false);modelMap.put("errMsg", e.getMessage());return modelMap;}// 1.2 圖片信息 基于Apache Commons FileUpload的文件上傳 ( 修改商鋪信息 圖片可以不更新)// Spring MVC中的 圖片存在CommonsMultipartFile中CommonsMultipartFile shopImg = null;// 從request的本次會話中的上線文中獲取圖片的相關內容CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());if (commonsMultipartResolver.isMultipart(request)) {MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;// shopImg是和前端約定好的變量名shopImg = (CommonsMultipartFile) multipartRequest.getFile("shopImg");}// 2. 修改店鋪if (shop != null && shop.getShopId() != null) {// Session 部分的 PersonInfo 修改商鋪是不需要的設置的。// 修改店鋪ShopExecution se = null;try {if (shopImg != null) {se = shopService.modifyShop(shop, shopImg.getInputStream(), shopImg.getOriginalFilename());} else {se = shopService.modifyShop(shop, null, null);}// 成功if (se.getState() == ShopStateEnum.SUCCESS.getState()) {modelMap.put("success", true);modelMap.put("errMsg", "修改成功");} else {modelMap.put("success", false);modelMap.put("errMsg", se.getStateInfo());}} catch (Exception e) {e.printStackTrace();modelMap.put("success", false);modelMap.put("errMsg", "ModifyShop Error");}} else {// 將錯誤信息返回給前臺modelMap.put("success", false);modelMap.put("errMsg", "ShopId不合法");}return modelMap;}Controller層的單元測試,待我們完成前端頁面一起聯調。
注冊商鋪的session部分的完善
同時 完善下 注冊商鋪的session部分,之前是寫死的person ,現在需要從session中獲取, 具體看注釋部分。
// 2. 注冊店鋪if (shop != null && shopImg != null) {// Session// 店主persionInfo的信息,肯定要登錄才能注冊店鋪。// 所以這部分信息我們從session中獲取,盡量不依賴前端,這里暫時時不具備條件,后續改造,先硬編碼,方便單元測試// PersonInfo personInfo = new PersonInfo();// personInfo.setUserId(1L);// 注冊店鋪之前登錄,登錄成功后,約定好將user這個key 設置到session中,// 這里通過key就可以取到PersonInfo的信息PersonInfo personInfo = (PersonInfo) request.getSession().getAttribute("user");shop.setOwner(personInfo);Github地址
代碼地址: https://github.com/yangshangwei/o2o
總結
以上是生活随笔為你收集整理的实战SSM_O2O商铺_19【商铺编辑】Controller层开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实战SSM_O2O商铺_18【商铺编辑】
- 下一篇: 实战SSM_O2O商铺_20【商铺编辑】