ModelAndView替换问题
来源:8-6 商品添加之前端实现下
SayCheese
2021-03-08
老师,下面这段代码,我做的改变仅仅是将返回类型改为 ModelAndView
,将 modelMap
也改成 ModelAndView
类型,所有的 put
改成 addObject
。但是为什么会添加商品页面提交后会有404错误,这跟我使用了哪个类型应该没关吧?感觉这只跟方法上面的两个注解有关。
@RequestMapping(value = "/addproduct", method = RequestMethod.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;
ImageHolder thumbnail = null;
List<ImageHolder> productImgList = new ArrayList<ImageHolder>();
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
try {
// 若请求中存在文件流,则取出相关的文件(包括缩略图和详情图)
if (multipartResolver.isMultipart(request)) {
thumbnail = handleImage(request, thumbnail, productImgList);
} else {
modelMap.put("success", false);
modelMap.put("errMsg", "上传图片不能为空");
return modelMap;
}
} catch (Exception e) {
modelMap.put("success", false);
modelMap.put("errMsg", e.toString());
return modelMap;
}
try {
String productStr = HttpServletRequestUtil.getString(request, "productStr");
// 尝试获取前端传过来的表单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");
product.setShop(currentShop);
// 执行添加操作
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;
}
写回答
1回答
-
SayCheese
提问者
2021-03-08
老师,我试了好几种解决方式都没能成功。
网上有人可能是导包错误,我找了下,发现包并没有问题,就是 servlet 下的。
我尝试找了下 ModelAndView 的使用方式,然后把方法前的两个注解改成了 `@PostMapping("addproduct"),此方法依旧无效。
不知道老师能不能提供一些解决方法
012021-03-09
相似问题