注意:接收前端参数的变量的初始化,包括商品、缩略图、详情图列表实体类
@Controller
@RequestMapping("/shopadmin")
public class ProductManagementController {
@Autowired
private ProductService productService;
//支持上传商品详情图的最大数量
private static final int IMAGEMAXCOUNT = 6;
@RequestMapping(value="/addproduct",method=RequestMethod.POST)//接收表单数据,因此用POST
@ResponseBody
private Map<String,Object> addProduct(HttpServletRequest request){
Map<String,Object> modelMap = new HashMap<String,Object>();
//验证码校验
if(!CodeUtil.checkVerifyCode(request)) {
modelMap.put("success", false);
modelMap.put("errMsg", "输入了错误的验证码");
return modelMap;
}
//接收前端参数的变量的初始化,包括商品、缩略图、详情图列表实体类
ObjectMapper mapper = new ObjectMapper();
Product product = null;
String productStr = HttpServletRequestUtil.getString(request, "productStr");//从前端的json转换为string
MultipartHttpServletRequest multipartRequest = null;//处理文件流
ImageHolder thumbnail = null;//处理缩略图,保存缩略图文件流和名字
List<ImageHolder> productImgList = new ArrayList<ImageHolder>();
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());//从session获取文件流
try {
//若请求中存在文件流,则取出相关的文件(包括缩略图和详情图)
if(multipartResolver.isMultipart(request)) {
multipartRequest = (MultipartHttpServletRequest) request;
//取出缩略图并构建ImageHolder对象
CommonsMultipartFile thumbnailFile = (CommonsMultipartFile) multipartRequest.getFile("thumbnail");
thumbnail = new ImageHolder(thumbnailFile.getOriginalFilename(), thumbnailFile.getInputStream());
//取出详情图列表并构建List<ImageHolder>列表对象,最多支持上传六张图片
for(int i = 0; i < IMAGEMAXCOUNT; i++) {
CommonsMultipartFile productImgFile = (CommonsMultipartFile) multipartRequest.getFile("productImg"+i);
if(productImgFile != null) {
//若取出的第i张详情图片文件流不为空,则将其加入详情图列表
ImageHolder productImg = new ImageHolder(productImgFile.getName(),
productImgFile.getInputStream());
productImgList.add(productImg);
}else {
//若取出的第i张详情图片文件流为空,则终止循环
break;
}
}
}else {
modelMap.put("success", true);
modelMap.put("errMsg", "上传图片不能为空");
return modelMap;
}
}catch (Exception e) {
modelMap.put("success", false);
modelMap.put("errMsg", e.toString());
return modelMap;
}
try {
//尝试获取前端传过来的表单string流并将其转换成Product实体类
product = mapper.readValue(productStr, Product.class);
}catch (Exception e) {
modelMap.put("success", false);
modelMap.put("errMsg", e.toString());
return modelMap;
}
//若product信息,缩略图及详情图列表非空,则开始进行商品添加操作
if(product != null && thumbnail != null && productImgList.size() > 0) {
try {
//从session中获取当前店铺的Id并赋值给product,减少对前端数据的依赖
Shop currentShop = (Shop)request.getSession().getAttribute("currentShop");
Shop shop = new Shop();
shop.setShopId(currentShop.getShopId());
product.setShop(shop);
//执行添加操作
ProductExecution pe = productService.addProduct(product, thumbnail, productImgList);
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;
}
}