校园商铺-4店铺注册功能模块-6店铺注册之Controller层的实现

1.HttpservletRequest
HttpservletRequest request代表的是客户端的请求。当客户端通过http协议访问服务器的时候,http请求头中的所有信息,都封装在这个对象中,通过这个对象提供的方法,就可以获得客户端请求的所有信息。
以用户注册为例,当用户注册店铺时,用户需要在前端提交店铺的相关信息,这个店铺的信息都会被保存这个request中,返回值类型是Map类型,用来返回必要的健值对结果。
新建工具类HttpServletRequestUtil.java,从HttpServletRequest对象中获取相关的值

package com.csj2018.o2o.util;

import javax.servlet.http.HttpServletRequest;

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 -1L;
        }
    }
     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)) {
                result = null;
            }
            return result;
        }catch (Exception e) {
            return null;
        }
    }
}

Jackson-databind

        <!-- json解析 -->
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>

jackson-databind1分钟教程

package com.csj2018.o2o.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;

class MyValue{
    public String name;
    public int age;
}
public class TestJackson {
    private static Logger logger = LoggerFactory.getLogger(TestJackson.class);
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        try {
            //读取json
            MyValue value = mapper.readValue("{\"name\":\"Bob\",\"age\":15}", MyValue.class);
            logger.warn("姓名:"+value.name+"\t年龄:"+value.age);
            //写入json
            String jsonString = mapper.writeValueAsString(value);
            logger.warn("json结果:"+jsonString.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }       
    }
}


ShopManagerController.java

package com.csj2018.o2o.web.shopadmin;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import java.io.InputStream;
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.csj2018.o2o.dto.ShopExecution;
import com.csj2018.o2o.entity.PersonInfo;
import com.csj2018.o2o.entity.Shop;
import com.csj2018.o2o.enums.ShopStateEnum;
import com.csj2018.o2o.service.ShopService;
import com.csj2018.o2o.util.HttpServletRequestUtil;
import com.csj2018.o2o.util.ImageUtil;
import com.csj2018.o2o.util.PathUtil;
import com.fasterxml.jackson.databind.ObjectMapper;

@Controller
@RequestMapping("/shopadmin")
public class ShopManagerController {
    //注入一个ShopService,提供服务
    @Autowired
    private ShopService shopService;
    @RequestMapping(value="/registershop",method=RequestMethod.POST)
    @ResponseBody
    private Map<String,Object> registerShop(HttpServletRequest request){
        //先定义一个返回值
        Map<String,Object> modelMap = new HashMap<String,Object>();
        //1.接收并转换相应的参数,包括店铺信息以及图片信息
        String shopStr = HttpServletRequestUtil.getString(request, "shopStr");
        //将json转换为Shop实例
        ObjectMapper mapper = new ObjectMapper();
        Shop shop = null;
        try {
            shop = mapper.readValue(shopStr, Shop.class);
        }catch(Exception e) {
            modelMap.put("success",false);
            modelMap.put("errMeg",e.getMessage());
            return modelMap;
        }
        //将请求中的文件流剥离出来,通过CommonsMultipartFile去接收
        CommonsMultipartFile shopImg = null;
        CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(
                request.getSession().getServletContext());
        if(commonsMultipartResolver.isMultipart(request)) {
            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();
            //以后会完善,从Session获取
            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(Exception e) {
                modelMap.put("success",false);
                modelMap.put("errMsg", e.getMessage());
                return modelMap;
            }
            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;
            }
            return modelMap;
        }else {
            modelMap.put("success",false);
            modelMap.put("errMsg", "请输入店铺信息");
            return modelMap;
        }

    }
    private static void inputStreamToFile(InputStream inputStream,File file) {
        FileOutputStream os = null;
        try {
            os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[1024];
            while((bytesRead=inputStream.read(buffer))>0) {
                os.write(buffer,0,bytesRead);
            }
        }catch (Exception e) {
            throw new RuntimeException("调用inputStreamToFile产生异常:"+e.getMessage());
        }finally {
            try {
                if(os != null) {
                    os.close();
                }
                if(inputStream != null) {
                    inputStream.close();
                }
            }catch (IOException e) {
                throw new RuntimeException("调用inputStreamToFile产生异常:"+e.getMessage());
            }
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/csj2018/p/11598284.html