springMVC初步学习(六)


郁闷啊,半天没搞定一个问题,先放这,明天接着查资料。  是关于springMVC读取Json格式的数据,如何自动转换成对象的?????是自己配置的问题?可以肯定是springMVC并未自动读取json数据并调用对象的set()方法。。。


客户端代码:

        

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     
    <title>My JSP 'welcome.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">

	<script type="text/javascript" src="/springMVC2/js/JQuery.js"></script>
	<script type="text/javascript">
		$(document).ready(function(){
			$("#add").click(function(){
				var userName = $("#userName").attr("value");
				var age =$("#age").attr("value");
				//var userName = encodeURI($("#userName").attr("value"));
				//var age = encodeURI($("#age").attr("value"));
				
				var user = {"userName":userName,"age":age};
				alert(JSON.stringify(user));
				$.ajax({
					type:"post",
					url:"/springMVC2/data/jsonaddUser",
					contentType: "application/json",
					data:JSON.stringify(user),
					success:function(a){
						alert("userName--->" + a.userName + "age--->" + a.age );
					}
				});
			});
		});
	</script>
	
  </head>
  
  <body>
   		<h1>json方式添加用户</h1>
		姓名:<input type="text" id="userName" name="userName">
		年龄:<input type="text" id="age" name="age">
		<input type="button" id="add" value="添加">	
    
  </body>
</html>

服务器端代码:

   

@RequestMapping("/jsonaddUser") 
	public void jsonaddUser2(User user,HttpServletRequest request,HttpServletResponse response){
		
		System.out.println(user.getUserName() + " " + user.getAge());
		
		String result = "{\"userName\":\" "+ user.getUserName() +" \",\"age\":\" "+ user.getAge()+" \"}";
		PrintWriter out = null;
		response.setContentType("application/json");
		
		try {
			out = response.getWriter();
			out.write(result);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


这个流程是问有问题的,服务器端的jsonaddUser2方法调用了,也输出到页面上了,问题是空的。为什么没能读取json格式数据,并自动装载到user中呢?

少了什么呢?


妈的,实在忍不住,又折腾了下,搞出点眉目来了,先记录下。发现自己漏了不少东西:

   1.配置方面,需要添加2个有关json的包:

jackson-core-asl-1.9.12.jar

jackson-mapper-asl-1.9.12.jar

    在springMVC-servlet.xml中添加有关json的bean:

    

  	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="cacheSeconds" value="0" />  
        <property name="messageConverters">  
            <list>  
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>  
            </list>  
        </property>
    </bean>  

  2. 关键的部分,未在user对象上配置 @RequestBody 注解,虽现在不是很明了有什么用,接下来的学习留心。


 3. 也是最让人郁闷的地方,貌似js语句写的有问题,Input中的数据没取出来还是怎么的?自己用

       data:JSON.stringify({userName:'fcj',age:'24'}) 替换了  data:JSON.stringify(user)才最终搞定了。

       明天接着解决这问题。


===================================================================

  TMD,果然是js语句的问题。

    不能使用

$("#userName").attr("value")

$("#age").attr("value")   这样的语句,而必须是使用:

         $("#userName").val()

$("#age").val()

同时还要注意json的格式,键必须是字符串。js代码如下:

	<script type="text/javascript" src="/springMVC2/js/JQuery.js"></script>
	<script type="text/javascript">
		$(document).ready(function(){
			$("#add").click(function(){
				var userName = $("#userName").val();
				var age =$("#age").val();
				//var userName = encodeURI($("#userName").attr("value"));
				//var age = encodeURI($("#age").attr("value"));
				//{"userName":'fcj',"age":'24'}
				var user = {"userName":userName,"age":age};
				alert(JSON.stringify(user));
				$.ajax({
					type:"post",
					url:"/springMVC2/data/jsonaddUser",
					contentType: "application/json",
					data:JSON.stringify(user),
					success:function(a){
						alert("userName--->" + a.userName + "age--->" + a.age );
						$("#userName").val(a.userName + 120);
					}
				});
			});
		});
	</script>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值