校园商铺-4-店铺注册功能模块-Controller

本节内容,实现ShopController功能

1.在web包下创建shopadmin包,并创建ShopController类。

在这里插入图片描述

2.在util包下创建HttpRequestServletUtil

处理HttpServletRequest参数,从request请求中根据key提取value,并转换为相应的类型。

package com.imooc.o2o.util;

import javax.servlet.http.HttpServletRequest;

/**
 *  处理HttpServletRequest参数
 *  从request请求中根据key提取value,并转换为相应的类型
 * @author zhanghui
 *
 */
public class HttpServletRequestUtil {
	public static int getInt(HttpServletRequest request,String key) {
		try {
			return Integer.decode(request.getParameter(key));
		}catch (Exception e) {
			return -1;//转换失败
		}
	}
	
	public static long getLong(HttpServletRequest request,String key) {
		try {
			return Long.valueOf(request.getParameter(key));
		}catch (Exception e) {
			return -1;//转换失败
		}
	}
	
	public static double getDouble(HttpServletRequest request,String key) {
		try {
			return Double.valueOf(request.getParameter(key));
		}catch (Exception e) {
			return -1d;//转换失败
		}
	}
	
	public static boolean getBoolean(HttpServletRequest request,String key) {
		try {
			return Boolean.valueOf(request.getParameter(key));
		}catch (Exception e) {
			return false;//转换失败
		}
	}
	
	public static String getString(HttpServletRequest request,String key) {
		try {
			String result = request.getParameter(key);
			if(result != null) {
				result = result.trim();
			}
			if("".equals(result)) {
				return null;
			}
			return result;
		}catch (Exception e) {
			return null;//转换失败
		}
	}
}

3.实现ShopController

package com.imooc.o2o.web.shopadmin;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
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.fasterxml.jackson.databind.ObjectMapper;
import com.imooc.o2o.dto.ShopExecution;
import com.imooc.o2o.entity.PersonInfo;
import com.imooc.o2o.entity.Shop;
import com.imooc.o2o.enums.ShopStateEnum;
import com.imooc.o2o.service.ShopService;
import com.imooc.o2o.util.HttpServletRequestUtil;
import com.imooc.o2o.util.ImageUtil;
import com.imooc.o2o.util.PathUtil;
@Controller
@RequestMapping("/shopadmin")
public class ShopManagementController {
	@Autowired
	private ShopService shopService;
	
	
	/**
	 *  接收表单
	 * @param request
	 * @return
	 */
	@RequestMapping(value = "/registershop",method = RequestMethod.POST)
	@ResponseBody
	private Map<String,Object> registerShop(HttpServletRequest request){
		//用来返回map
		Map<String,Object> modelMap = new HashMap<String, Object>();
		//1.接收并转化相应的参数,包括店铺信息和图片信息
		String shopStr = HttpServletRequestUtil.getString(request, "shopStr");
		ObjectMapper mapper = new ObjectMapper();
		Shop shop = null;
		try {
			shop = mapper.readValue(shopStr, Shop.class);//json对象转换为shop.class
		}catch(Exception e){
			modelMap.put("success", false);
			modelMap.put("errMsg", e.getMessage());
			return modelMap;
		}
		CommonsMultipartFile shopImg = null;//接收图片
		//文件上传解析器,解析request中的文件信息
		//从本次会话中获取相关文件上传的内容
		CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(
				request.getSession().getServletContext());
		
		if(commonsMultipartResolver.isMultipart(request)) {
			//multipartHttpServletRequest可提取相关的文件流
			MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)request;
			shopImg = (CommonsMultipartFile)multipartHttpServletRequest.getFile("shopImg");
		}else {
			modelMap.put("success", false);	
			modelMap.put("errMsg", "上传图片不能为空");
			return modelMap;
		}
		//2.注册店铺
		if(shop != null && shopImg != null) {
			PersonInfo owner = new PersonInfo();
			owner.setUserId(1L);
			shop.setOwner(owner);
			File shopImgFile = new File(PathUtil.getImgBasePath() + ImageUtil.getRandomFileName());//空文件接收
			try {
				shopImgFile.createNewFile();
			}catch (IOException e) {
				modelMap.put("success", false);	
				modelMap.put("errMsg", e.getMessage());
				return modelMap;
			}
			try {
				inputStreamToFile(shopImg.getInputStream(), shopImgFile);
			} catch (IOException e) {
				e.printStackTrace();
			}
			ShopExecution se = shopService.addShop(shop,shopImgFile );
			if(se.getState() == ShopStateEnum.CHECK.getState()) {
				modelMap.put("success", true);
			}else {
				modelMap.put("success", false);
				modelMap.put("errMsg", se.getStateInfo());
			}
			return modelMap;
		}else {
			modelMap.put("success", false);	
			modelMap.put("errMsg", "请输入店铺信息");
			return modelMap;
		}
		//3.返回结果
	}
	
	/**
	 *  将inputStream转换为file
	 * @param is
	 * @param file
	 */
	private static void inputStreamToFile(InputStream is,File file) {
		FileOutputStream os = null;
		try {
			os = new FileOutputStream(file);
			int bytesRead = 0;
			byte[] buffer = new byte[1024];
			while((bytesRead = is.read(buffer))!=-1) {
				os.write(buffer,0,bytesRead);
			}
		}catch (Exception e) {
			throw new RuntimeException("调用inputStreamTofile产生异常:" + e.getMessage());
		}finally {
			try {
				if(os != null) {
					os.close();
				}
				if(is != null) {
					is.close();
				}
			}catch (IOException e) {
				throw new RuntimeException("inputStreamTofile关闭io产生异常:" + e.getMessage());
			}
		}
	}
}


1.接收并转化相应的参数,店铺信息和图片
2.注册店铺
3.返回

使用ObjectMapper进行JSON对象转换
引入依赖

<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-databind</artifactId>
		<version>2.8.7</version>
</dependency>
图片处理

图片处理使用Spring自带的CommonsMultipartResolver作为文件上传解析器。从本次会话中获取相关文件上传的内容

CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(
				request.getSession().getServletContext());
//判断请求中是否存在文件上传的内容			
if(commonsMultipartResolver.isMultipart(request)) {
			//multipartHttpServletRequest可提取相关的文件流
			MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)request;
			//从请求中提取文件
			shopImg = (CommonsMultipartFile)multipartHttpServletRequest.getFile("shopImg");
		}

此处提取的文件为CommonsMultipartFile类型,service层的方法接收参数问file类型,固将CommonsMultipartFile转换为File类型,由于CommonsMultipartFile无法直接转换为File,可通过将CommonsMultipartFile转换为Inputstream类型,然后再转为File类型。
可见上文中inputStreamToFile()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值