实战SSM_O2O商铺_19【商铺编辑】Controller层开发
生活随笔
收集整理的這篇文章主要介紹了
实战SSM_O2O商铺_19【商铺编辑】Controller层开发
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 概述
- ShopController
- ShopController#getShopInfoById方法
- getShopInfoById
- 測(cè)試
- ShopController#modifyShop方法
- 注冊(cè)商鋪的session部分的完善
- Github地址
概述
按照需求設(shè)計(jì),我們希望商鋪管理者
-
店鋪名稱不能修改
-
店鋪類別不能修改
-
其余信息可編輯修改
分為兩步,
- 第一步前端傳入shopId到后臺(tái)獲取商鋪信息,前端展示
- 第二步修改商鋪信息,提交到后臺(tái),更新商鋪
ShopController
com.artisan.o2o.web.shopadmin.ShopController.java
ShopController#getShopInfoById方法
getShopInfoById
/*** * * @Title: getShopInfoById* * @Description: 根據(jù)shopId獲取shop信息, 接收前端的請(qǐng)求,獲取shopId ,所以入?yún)镠ttpServletRequest* @ResponseBody 不需要VIEW展現(xiàn)層模塊,直接顯示到客戶端的內(nèi)容。 將內(nèi)容或?qū)ο笞鳛?HTTP 響應(yīng)正文返回* * @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) {// 查詢 ,按照設(shè)計(jì),我們希望前端頁面下拉列表中可以修改區(qū)域信息,所以需要查詢出來全量的區(qū)域列表// 對(duì)已ShopCategory而言,我們DAO層的SQL已經(jīng)將shop_category_id和// shop_category_name 查詢出來,前端設(shè)置到對(duì)應(yīng)的屬性上即可。沒有必要全部查詢出來。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;}測(cè)試
啟動(dòng)tomcat,訪問 http://localhost:8080/o2o/shopadmin/getshopinfobyId?shopId=30
返回的數(shù)據(jù)如下:
{"shop": {"shopId": 30,"shopName": "優(yōu)樂美","shopDesc": "優(yōu)樂美奶茶店","shopAddr": "復(fù)興街","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}] }檢查數(shù)據(jù),符合預(yù)期。
ShopController#modifyShop方法
/*** * * @Title: modifyshop* * @Description:* * @param request* 因?yàn)槭墙邮涨岸说恼?qǐng)求,而前端的信息都封裝在HttpServletRequest中,* 所以需要解析HttpServletRequest,獲取必要的參數(shù)* * 1. 接收并轉(zhuǎn)換相應(yīng)的參數(shù),包括shop信息和圖片信息 2.修改店鋪 3. 返回結(jié)果給前臺(tái)* @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. 驗(yàn)證碼校驗(yàn)if (!VerifyCodeUtil.verifyCode(request)) {modelMap.put("success", false);modelMap.put("errMsg", "驗(yàn)證碼不正確");return modelMap;}// 1. 接收并轉(zhuǎn)換相應(yīng)的參數(shù),包括shop信息和圖片信息// 1.1 shop信息// shopStr 是和前端約定好的參數(shù)值,后端從request中獲取request這個(gè)值來獲取shop的信息String shopStr = HttPServletRequestUtil.getString(request, "shopStr");// 使用jackson-databind 將json轉(zhuǎn)換為pojoObjectMapper mapper = new ObjectMapper();Shop shop = null;try {// 將json轉(zhuǎn)換為pojoshop = mapper.readValue(shopStr, Shop.class);} catch (Exception e) {e.printStackTrace();// 將錯(cuò)誤信息返回給前臺(tái)modelMap.put("success", false);modelMap.put("errMsg", e.getMessage());return modelMap;}// 1.2 圖片信息 基于Apache Commons FileUpload的文件上傳 ( 修改商鋪信息 圖片可以不更新)// Spring MVC中的 圖片存在CommonsMultipartFile中CommonsMultipartFile shopImg = null;// 從request的本次會(huì)話中的上線文中獲取圖片的相關(guān)內(nèi)容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 修改商鋪是不需要的設(shè)置的。// 修改店鋪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 {// 將錯(cuò)誤信息返回給前臺(tái)modelMap.put("success", false);modelMap.put("errMsg", "ShopId不合法");}return modelMap;}Controller層的單元測(cè)試,待我們完成前端頁面一起聯(lián)調(diào)。
注冊(cè)商鋪的session部分的完善
同時(shí) 完善下 注冊(cè)商鋪的session部分,之前是寫死的person ,現(xiàn)在需要從session中獲取, 具體看注釋部分。
// 2. 注冊(cè)店鋪if (shop != null && shopImg != null) {// Session// 店主persionInfo的信息,肯定要登錄才能注冊(cè)店鋪。// 所以這部分信息我們從session中獲取,盡量不依賴前端,這里暫時(shí)時(shí)不具備條件,后續(xù)改造,先硬編碼,方便單元測(cè)試// PersonInfo personInfo = new PersonInfo();// personInfo.setUserId(1L);// 注冊(cè)店鋪之前登錄,登錄成功后,約定好將user這個(gè)key 設(shè)置到session中,// 這里通過key就可以取到PersonInfo的信息PersonInfo personInfo = (PersonInfo) request.getSession().getAttribute("user");shop.setOwner(personInfo);Github地址
代碼地址: https://github.com/yangshangwei/o2o
總結(jié)
以上是生活随笔為你收集整理的实战SSM_O2O商铺_19【商铺编辑】Controller层开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实战SSM_O2O商铺_18【商铺编辑】
- 下一篇: 实战SSM_O2O商铺_20【商铺编辑】