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

老师,我试了好几种解决方式都没能成功。

  1. 网上有人可能是导包错误,我找了下,发现包并没有问题,就是 servlet 下的。

  2. 我尝试找了下 ModelAndView 的使用方式,然后把方法前的两个注解改成了 `@PostMapping("addproduct"),此方法依旧无效。

不知道老师能不能提供一些解决方法

0
1
翔仔
同学好,因为我们的上下文不一致,和视频不一样,我这边没法帮忙准确定位问题,如果退回和视频一样是否就可以了呢,因为我猜同学的addShop是没问题的。而且即便用modelandview,如果路由配置都一样,那么肯定能到这个方法里面去的
2021-03-09
共1条回复

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5113 学习 · 8144 问题

查看课程