郁闷啊,半天没搞定一个问题,先放这,明天接着查资料。 是关于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>