0 0

SPRING3MVC接收JSON参数的问题 JSON解析为空15

我想把前台页面里一个JSON结构的数据传到controller,尝试了数十次,由map到list到string都无法识别。
JSON的数据结构如下
{"info":{"templateName":$("#templateName").val(),"templateNo":"tmp156464"}}


调用方式是通过jquery的ajax调用spring后台,
$("#btSaveTemplate").click(function()
				
				{
//					alert($("#templateName").val());
					var data = {"info":{"templateName":$("#templateName").val(),"templateNo":"tmp156464"}};
					var data2 = {"templateName":$("#templateName").val()};
					
					$.ajax({
            			type: "get",//使用get/post方法访问后台
            			dataType: "json",//返回json格式的数据
           				url: "lotty/add",//要访问的后台地址
           				data: data,
            			
            			success: function(msg){//msg为返回的数据,在这里做数据绑定
            				if(msg == '1'){
            					alert('操作成功');
            					location.reload();
            				}
                		},
                		error: function(jqXHR, textStatus, errorThrown) {
    						alert("error:" + textStatus + " exception:" + errorThrown);
    					}
                		
                	});


后台spring确实收到了请求,并且执行了相应的方法,如下:
   
@ResponseBody
	@RequestMapping(value="/add", method=RequestMethod.GET)
public String doAdd([color=red][b]String info[/b][/color],Model model) throws Exception;


红色粗体的地方,用String接收是null,改用List和HashMap都不行,后来在SPRING的JAR包中,翻到一个MappingJacksonJsonView,尝试了下,还是空值。之后,我在方法里加了HttpServletRequest参数,郁闷的是:request里面的parameter部分为空
我想可能是SPRING注入处理JSON类的地方出错了,但是这个也不太可能。因为我传最基本的纯key-value结构的JSON数据,后台能成功捕获到(我的做法比较笨,前台有多少个key,controller方法里有多少个对应参数的那种)
这是我SPRING的相关配置:
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

然后注入:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
	    
	    <property name="messageConverters">
	    	<list>
	    		<ref local="mappingJacksonHttpMessageConverter"/>
	    	</list>
	    </property>
	</bean>

到此,实在不知道其他的解决方法了。
我的想法是,在实际应用中如果做批量插入的话,可以一次提交一个大的JSON数据,在后台里解析成JSONObject对象,再逐步取值。试了大半天,没有结果,上来问问大家,SPRING3里面JSON做参数的一些经验。

问题补充:
amcucn 写道
简单点的方法以就是直接将你要传的json数据当成一个字符串提交到后台,后台使用JSONObject相关的方法 可以直接转成对应的MAP对象。然后你就可以处理了。大致的想法就是绕过springmvc本身的json处理类,把你想的"JSON"当成字符串传到后台。


也只能这样,看来SPRING3.0.5并没有能够很好的集成JSONObject的解决方案,只是死板地提供了参数对应和VO去封装JSON信息。
2012年4月29日 22:36

4个答案 按时间排序 按投票排序

0 0

采纳的答案

简单点的方法以就是直接将你要传的json数据当成一个字符串提交到后台,后台使用JSONObject相关的方法 可以直接转成对应的MAP对象。然后你就可以处理了。大致的想法就是绕过springmvc本身的json处理类,把你想的"JSON"当成字符串传到后台。

2012年4月30日 19:03
0 0

" target="_blank">" />" target="_blank">" wmode="" quality="high" menu="false" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="200" height="200">

2014年8月18日 10:34
0 0

sjax提交加上这个:contentType : 'application/json', 

2013年11月02日 22:43
0 0

你传过来的info不是String对象,你要用一个相应的对象接收.这个对象里必须有
String templateName;和String templateNo 两个属性

2012年5月01日 11:06

相关推荐

Global site tag (gtag.js) - Google Analytics