请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

JSON传到后台的值获取总是Null

shoporeration.js 通过JSON传给后台(ShopManagementController)的注册商店的值(form),在后台获取getString("shopStr");/getString("shopImg");  都是null

//img1.sycdn.imooc.com//szimg/5a65ae9200016bc228801588.jpghttps://img1.sycdn.imooc.com//szimg/5a66a0670001a8d128801588.jpg

//img1.sycdn.imooc.com//szimg/5a65ae9900017a7228801588.jpg


正在回答 回答被采纳积分+3

2回答

翔仔 2018-01-23 12:03:43

同学好,这样看很难看出来。

同学可以按照翔仔下面提供的js代码以及spring-web.xml相关的配置去替换掉你的并且改到可以执行并传到后台,同时把@RequestBody这个去了保持和视频controller一致,然后看看能搞定不,编程就是这样,需要不断重试,也是锻炼耐心和解决问题能力的过程,同学一定要沉住气,加油:)

js

	// 提交按钮的事件响应,分别对店铺注册和编辑操作做不同响应
	$('#submit').click(function() {
		// 创建shop对象
		var shop = {};
		if (isEdit) {
			// 若属于编辑,则给shopId赋值
			shop.shopId = shopId;
		}
		// 获取表单里的数据并填充进对应的店铺属性中
		shop.shopName = $('#shop-name').val();
		shop.shopAddr = $('#shop-addr').val();
		shop.phone = $('#shop-phone').val();
		shop.shopDesc = $('#shop-desc').val();
		// 选择选定好的店铺类别
		shop.shopCategory = {
			shopCategoryId : $('#shop-category').find('option').not(function() {
				return !this.selected;
			}).data('id')
		};
		// 选择选定好的区域信息
		shop.area = {
			areaId : $('#area').find('option').not(function() {
				return !this.selected;
			}).data('id')
		};
		// 获取上传的图片文件流
		var shopImg = $('#shop-img')[0].files[0];
		// 生成表单对象,用于接收参数并传递给后台
		var formData = new FormData();
		// 添加图片流进表单对象里
		formData.append('shopImg', shopImg);
		// 将shop json对象转成字符流保存至表单对象key为shopStr的的键值对里
		formData.append('shopStr', JSON.stringify(shop));
		// 获取表单里输入的验证码
		var verifyCodeActual = $('#j_captcha').val();
		if (!verifyCodeActual) {
			$.toast('请输入验证码!');
			return;
		}
		formData.append('verifyCodeActual', verifyCodeActual);
		// 将数据提交至后台处理相关操作
		$.ajax({
			url : (isEdit ? editShopUrl : registerShopUrl),
			type : 'POST',
			data : formData,
			contentType : false,
			processData : false,
			cache : false,
			success : function(data) {
				if (data.success) {
					$.toast('提交成功!');
					if (!isEdit) {
						// 若为注册操作,成功后返回店铺列表页
						window.location.href = "/o2o/shopadmin/shoplist";
					}
				} else {
					$.toast('提交失败!' + data.errMsg);
				}
				// 点击验证码图片的时候,注册码会改变
				$('#captcha_img').click();
			}
		});
	});

spring-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
	<!-- 配置SpringMVC -->
	<!-- 1.开启SpringMVC注解模式 -->
	<mvc:annotation-driven />

	<!-- 2.静态资源默认servlet配置 (1)加入对静态资源的处理:js,gif,png (2)允许使用"/"做整体映射 -->
	<mvc:resources mapping="/resources/**" location="/resources/" />
	<mvc:default-servlet-handler />

	<!-- 3.定义视图解析器 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/html/"></property>
		<property name="suffix" value=".html"></property>
	</bean>
	<!-- 文件上传解析器 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="utf-8"></property>
		<!-- 1024 * 1024 * 20 = 20M -->
		<property name="maxUploadSize" value="20971520"></property>
		<property name="maxInMemorySize" value="20971520"></property>
	</bean>

	<!-- 4.扫描web相关的bean -->
	<context:component-scan base-package="com.imooc.o2o.web" />
</beans>

感觉是web的部分是不是配置错了,仔细核查下:),有问题咱们再看看

0 回复 有任何疑惑可以回复我~
翔仔 2018-01-21 22:16:37

同学好,出现这样的情况,需要同学确认前端js文件里到ajax前,是否formData里已传入相应的值,这个需要设置断点来确认。

同时ajax里的属性确保填对

		$.ajax({
			url : url,
			type : 'POST',
			data : formData,
			contentType : false,
			processData : false,
			cache : false,
			success : function(data) {
				if (data.success) {
				    // do something...
				}
			}
		});


0 回复 有任何疑惑可以回复我~
  • 提问者 Mrgao1218 #1
    前端断点测试过 是有值的。 还有其他可能吗
    回复 有任何疑惑可以回复我~ 2018-01-21 22:18:01
  • 提问者 Mrgao1218 #2
    老师,我补充了图片。麻烦您帮我看下
    回复 有任何疑惑可以回复我~ 2018-01-21 22:21:39
  • 翔仔 回复 提问者 Mrgao1218 #3
    shopImg是不是有问题?把shopImg去掉估计就能传进去了,同学可以试试,然后再看看shopImg这个问题怎么Fix
    回复 有任何疑惑可以回复我~ 2018-01-21 22:38:04
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信