SSM项目之商铺系统-店铺注册之Controller的实现(九)

新建一个controller类

@Controller//注解它是一个controller
    @RequestMapping("/shopadmin")//根url
public class ShopManagementController {
    @Autowired
    private ShopService shopService;
    @Autowired
    private ShopCategoryService shopCategoryService;
    @Autowired
    private AreaService areaService;

    @RequestMapping(value="/registershop",method = RequestMethod.POST)
    @ResponseBody//作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据
   /*
   * 注册商铺提交后转到的url
   * 对提交的数据进行处理
   * */
    private Map<String,Object> registerShop(HttpServletRequest request){
        Map<String,Object>  modelMap=new HashMap<String,Object>();
         //1.接受转换相应的参数,包括店铺信息和店铺图片信息
        String shopStr = HttpServletRequestUtil.getString(request,"shopStr");//通过转换工具类将前端传来的数据转为字符串
        ObjectMapper mapper=new ObjectMapper();//获取处理json的对象
        Shop shop=null;
        try{
            shop=mapper.readValue(shopStr,Shop.class);//将传入的jsonshopStr转为Shop对象并完成赋值
        }catch (Exception e){//出错后输出错误信息
            modelMap.put("success",false);
            modelMap.put("errMsg",e.getMessage());
            return modelMap;
        }
        /*
        * 操作添加图片
        * */
        CommonsMultipartFile shopImg=null;//spring自带
        CommonsMultipartResolver commonsMultipartResolver=new CommonsMultipartResolver(
                request.getSession().getServletContext()
        );//解析request传来的文件的,通过本次会话的上下文获取相关文件上传的内容
        if (commonsMultipartResolver.isMultipart((request))) {//如果有上传的文件流
            MultipartHttpServletRequest multipartHttpServletRequest= (MultipartHttpServletRequest) request;//这样就能提取出request中的文件流了
            shopImg=(CommonsMultipartFile)multipartHttpServletRequest.getFile("shopImg");//(这个字符串"shopImg"是前端传来的),得到文件
        }else {//如果不具备图片
            modelMap.put("success",false);
            modelMap.put("errMsg","上传图片不能为空");
            return modelMap;
        }
        // 2.注册店铺
        if (shop!=null&&shopImg!=null) {//如果接受完相应的参数
            PersonInfo owner=new PersonInfo();//owner的信息可以通过session获取
            owner.setUserId(1L);//先手动设置,后期更改
            shop.setOwner(owner);
            ShopExecution shopExecution= null;//不能直接传文件,因为CommonsMultipartFile和File不能直接转换
            try {
                shopExecution = shopService.addShop(shop,shopImg.getInputStream(),shopImg.getOriginalFilename());//因为不能直接传文件,file和CommonsMultipartFile不能直接转换,所以我们传入文件流和文件名操作
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (shopExecution.getState()== ShopStateEnum.CHECK.getState()){//如果操作成功
                modelMap.put("success",true);
            }else {
                modelMap.put("success",false);
                modelMap.put("errMsg",shopExecution.getState());
                return modelMap;
            }
            return modelMap;
        }else{
            modelMap.put("success",false);
            modelMap.put("errMsg","请输入店铺信息");
            return modelMap;
        }
        //3.返回结果

    }
}

方法功能:通过前端注册店铺传入的json数据,将其转为shop类型,并且接受图片,然后存入数据库中去

方法描述:

第一步:首先接受前端传来的Json数据,将json数据转为string字符串的形式,这里转成字符串因此我们需要一个工具类来转换前端的信息。

新建一个前端请求转为各种类型的工具类

package storepro.util;

import javax.servlet.http.HttpServletRequest;

//将前端传来的String值解析为相应的值,因为前端无论什么类型都传String
public class HttpServletRequestUtil {//通过前端传来的key值进行转换,这个key值通过前端设定好,我们后台直接去取出

    public static int getInt(HttpServletRequest request, String key) {//操作前端传来的int值
        try {
            return Integer.decode(request.getParameter(key));
        } catch (Exception e) {
            return -1;
        }
    }

    public static Long getLong(HttpServletRequest request, String key) {//操作前端传来的Long值
        try {
            return Long.valueOf(request.getParameter(key));
        } catch (Exception e) {
            return -1L;
        }

    }

    public static Double getDouble(HttpServletRequest request, String key) {//操作前端传来的double值
        try {
            return Double.valueOf(request.getParameter(key));
        } catch (Exception e) {
            return -1d;
        }

    }

    public static Boolean getBoolean(HttpServletRequest request, String key) {//操作前端传来的boolean值
        try {
            return Boolean.valueOf(request.getParameter(key));
        } catch (Exception e) {
            return false;
        }

    }

    public static String getString(HttpServletRequest request, String key) {//操作前端传来的Stirng值
        try {
            String result = request.getParameter(key);
            if (request != null) {
                result = result.trim();
            }
            if ("".equals(result)) {//如果字符串为空
                result = null;
            }
            return result;
        } catch (Exception e) {
            return null;
        }

    }


}

我们这个方法只需要json的String形式转为相对应的enetity类型,完成转换。

第二步:前端同样传入了照片,我们需要使用CommonsMultipartResolver commonsMultipartResolve获取request的文件流,并且对文建进行操作和存储

第三步:如果前两步方法都成功结束,那么我们通过servcie的addShop方法来存入这个店铺并返回正确信息。

猜你喜欢

转载自blog.csdn.net/sunmeok/article/details/81330078