新建一个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 registerShop(HttpServletRequest request){
Map modelMap=new HashMap();
//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的文件流,并且对文建进行操作和存储
使用MultipartResolve解析文件时,需要在springmvc中装配它的bean
第三步:如果前两步方法都成功结束,那么我们通过servcie的addShop方法来存入这个店铺并返回正确信息。