日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实战SSM_O2O商铺_30【商品】商品添加之Controller层的实现

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实战SSM_O2O商铺_30【商品】商品添加之Controller层的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • ProductController
  • 單元測試
  • Github地址

概述

商品添加Controller層的邏輯如下:

1. 獲取前端傳遞過來的Product對象,通過FastJson提供的api將其轉換為Product對象

2. 獲取前端傳遞過來的商品縮略圖以及商品詳情圖片,通過CommonsMultipartResolver來處理

3. 調用Service層的服務來持久化數據及圖片的操作


ProductController

package com.artisan.o2o.web.shopadmin;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartResolver;import com.artisan.o2o.dto.ImageHolder; import com.artisan.o2o.dto.ProductExecution; import com.artisan.o2o.entity.Product; import com.artisan.o2o.entity.Shop; import com.artisan.o2o.enums.ProductStateEnum; import com.artisan.o2o.exception.ProductOperationException; import com.artisan.o2o.service.ProductService; import com.artisan.o2o.util.HttPServletRequestUtil; import com.artisan.o2o.util.VerifyCodeUtil; import com.fasterxml.jackson.databind.ObjectMapper;@Controller @RequestMapping("/shopadmin") public class ProductController {@Autowiredprivate ProductService productService;// 最大上傳圖片數量private static final int IMAGEMAXCOUNT = 6;/*** * * @Title: addProduct* * @Description: 1. 驗證碼校驗* * 2. 接收前端參數:包括 商品、 商品縮略圖、商品詳情圖片實體類* * 前端頁面通過post方式傳遞一個包含文件上傳的Form會以multipart/form-data請求發送給服務器,* * 需要告訴DispatcherServlet如何處理MultipartRequest,我們在spring-web.* xml中定義了multipartResolver。* * 如果某個Request是一個MultipartRequest,它就會首先被MultipartResolver處理,* 然后再轉發相應的Controller。* * 在Controller中,* 將HttpServletRequest轉型為MultipartHttpServletRequest* ,可以非常方便的得到文件名和文件內容* * @param request* * @return: Map<String,Object>* * 注解@ResponseBody 負責將返回的map對象轉換為JSON,供前端使用*/@RequestMapping(value = "/addproduct", method = RequestMethod.POST)@ResponseBodypublic Map<String, Object> addProduct(HttpServletRequest request) {Map<String, Object> modelMap = new HashMap<String, Object>();Product product = null;// 接收前端傳遞過來的productString productStr = null;// 商品圖片縮略圖(輸入流和名稱的封裝類)ImageHolder thumbnail = null;// 將HttpServletRequest轉型為MultipartHttpServletRequest,可以很方便地得到文件名和文件內容MultipartHttpServletRequest multipartHttpServletRequest = null;// 接收商品縮略圖CommonsMultipartFile thumbnailFile = null;// 接收商品詳情圖片List<ImageHolder> productDetailImgList = new ArrayList<ImageHolder>();// 創建一個通用的多部分解析器CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());// Step1:校驗驗證碼if (!VerifyCodeUtil.verifyCode(request)) {modelMap.put("success", false);modelMap.put("errMsg", "驗證碼不正確");return modelMap;}// Step2: 使用FastJson提供的api,實例化Product 構造調用service層的第一個參數ObjectMapper mapper = new ObjectMapper();// 獲取前端傳遞過來的product,約定好使用productStrtry {productStr = HttPServletRequestUtil.getString(request, "productStr");product = mapper.readValue(productStr, Product.class);} catch (Exception e) {modelMap.put("success", false);modelMap.put("errMsg", e.toString());return modelMap;}// Step3: 商品縮略圖 和 商品詳情圖 構造調用service層的第二個參數和第三個參數try {// 判斷 request 是否有文件上傳,即多部分請求if (commonsMultipartResolver.isMultipart(request)) {// 將request轉換成多部分requestmultipartHttpServletRequest = (MultipartHttpServletRequest) request;// 得到縮略圖的CommonsMultipartFile ,和前端約定好使用thumbnail 傳遞// ,并構建ImageHolder對象thumbnailFile = (CommonsMultipartFile) multipartHttpServletRequest.getFile("thumbnail");if(thumbnailFile == null){modelMap.put("success", false);modelMap.put("errMsg", "上傳圖片不能為空~");return modelMap;}// 轉化為ImageHolder,使用service層的參數類型要求thumbnail = new ImageHolder(thumbnailFile.getInputStream() ,thumbnailFile.getOriginalFilename());// 得到 商品詳情的列表,和前端約定使用productImg + i 傳遞 ,并構建ImageHolder對象for (int i = 0; i < IMAGEMAXCOUNT; i++) {CommonsMultipartFile productDetailImgFile = (CommonsMultipartFile) multipartHttpServletRequest.getFile("productImg" + i);if (productDetailImgFile != null) {ImageHolder productDetailImg = new ImageHolder(productDetailImgFile.getInputStream(),productDetailImgFile.getOriginalFilename());productDetailImgList.add(productDetailImg);}else{// 如果從請求中獲取的到file為空,終止循環break;}}} else {modelMap.put("success", false);modelMap.put("errMsg", "上傳圖片不能為空");return modelMap;}} catch (Exception e) {modelMap.put("success", false);modelMap.put("errMsg", e.toString());return modelMap;}// Step4 調用Service層if (product != null && thumbnailFile != null && productDetailImgList.size() > 0) {try {// 從session中獲取shop信息,不依賴前端的傳遞更加安全Shop currentShop = (Shop) request.getSession().getAttribute("currentShop");product.setShop(currentShop);// 調用addProductProductExecution pe = productService.addProduct(product, thumbnail, productDetailImgList);if (pe.getState() == ProductStateEnum.SUCCESS.getState()) {modelMap.put("success", true);} else {modelMap.put("success", false);modelMap.put("errMsg", pe.getStateInfo());}} catch (ProductOperationException e) {modelMap.put("success", false);modelMap.put("errMsg", e.toString());return modelMap;}} else {modelMap.put("success", false);modelMap.put("errMsg", "請輸入商品信息");}return modelMap;}}

單元測試

待前端頁面開發完畢后,一并測試


Github地址

代碼地址: https://github.com/yangshangwei/o2o

總結

以上是生活随笔為你收集整理的实战SSM_O2O商铺_30【商品】商品添加之Controller层的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久这里只有精品8 | 天天干在线观看 | 亚洲成人动漫在线观看 | 秋霞国产精品 | 欧美成人tv | 国产精品51麻豆cm传媒 | 亚洲第一综合色 | 无遮挡边吃摸边吃奶边做 | 国产无套在线观看 | 中日韩在线播放 | 涩涩涩在线观看 | 黄视频在线观看免费 | 成人在线观看网 | 国产成人毛毛毛片 | 成人综合婷婷国产精品久久 | 少妇人妻综合久久中文字幕 | 日日夜夜免费视频 | 成人a网站 | 中国少妇高潮 | 波多野结衣一区二区三区四区 | 午夜精品小视频 | 99色在线视频 | 国产精品第8页 | 男女日日| 精品国产一区二区三区四 | www污污 | 国产伦精品一区二区 | 亚洲精品一区二区在线 | 国产成人精品一区二区三区无码熬 | 国产情侣av自拍 | 国产久操视频 | 精品人妻无码一区二区三区 | 久久免费一区 | 欧美性啪啪| 国产主播专区 | 亚洲再线 | 日韩在线免费视频观看 | 中文字幕狠狠 | 亚洲av乱码一区二区 | av毛片在线播放 | 美女试爆场恐怖电影在线观看 | 一区二区日韩欧美 | 欧美人在线 | 国产综合欧美 | 尤物最新网址 | 少妇做爰xxxⅹ性视频 | 亚洲成人www | 欧美日韩少妇精品 | 女教师高潮黄又色视频 | 激情福利视频 | 噼里啪啦国语版在线观看 | 精品天堂| 短裙公车被强好爽h吃奶视频 | 亚洲美女自拍偷拍 | 少妇中文字幕 | 日韩成人在线看 | 日韩a√ | 麻豆综合 | 久久伊人网站 | 欧洲做受高潮欧美裸体艺术 | 蜜桃av乱码一区二区三区 | 97超碰97 | 日韩xxxxxxxxx | 国产三级免费观看 | 国产精品网址 | 国内自拍2020 | 日韩精品播放 | 欧美人妖另类 | 欧美熟妇精品一区二区蜜桃视频 | 精品欧美一区二区久久久久 | 91视频入口| 激情小说在线观看 | 胖女人做爰全过程 | 欧美有码在线观看 | 国产亚洲区 | 91精品国产综合久久久久 | 草久久av| 狠狠操婷婷 | 91视频在线免费看 | 久久久18禁一区二区三区精品 | 日本黄色三级视频 | 国产一区导航 | 日本一区不卡在线观看 | 色屁屁一区二区三区视频 | 国产福利小视频在线观看 | 操你啦影院 | 337p粉嫩大胆色噜噜噜 | 91传媒入口 | 老熟女一区二区三区 | 成人精品一区二区三区电影 | 亚洲自拍中文 | 91看片免费 | 国产精品大屁股白浆一区 | 黄网站免费在线 | 色中文字幕| 亚洲视频在线观看一区二区三区 | 91国产丝袜在线播放 | 亚洲永久免费观看 | 国产午夜福利一区二区 |