SpringMVC @RequestBody接收Json对象字符串 @ResponseBody处理json数据类型
2014-12-19 11:34
1226 查看
地址:http://www.cnblogs.com/quanyongan/archive/2013/04/16/3024741.html
以前,一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.
JavaScript 代码:
Java代码
地址:http://blog.csdn.net/dcx903170332/article/details/17957579
最近做了一个spring+ajax 二级级联菜单,总是报各种错误,最后经过分析总结终于解决此问题,现在把问题展示给大家,以供分享。如有问题可以评论,肯定支持。
json需要引用的JSON包有:jackson-core-asl-1.9.13.jar,jackson-mapper-asl-1.9.13.jar,版本并不是固定的,只是这两个的版本一样就行了
controller层:
@RequestMapping(value = "branchMap")
@ResponseBody
public List<Temp> getBranchMap(HttpServletRequest request) {
String tmp = request.getParameter("organizid");
Long id = Long.parseLong(tmp);
return serviceManager.getBranchMap(id);
}
service层:
public List<Temp> getBranchMap(Long id) {
return institutionsDao.getBranchMap(id);
}
dao层:(其中Temp是临时类,就是institutions类想要的字段组成的类)
public List<Temp> getBranchMap(Long id) {
List<Temp> lt = new ArrayList<Temp>();
String sql = "select s.id,s.name from institutions s where s.parent=?";
Session session = this.getSession();
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.setLong(0, id);
sqlQuery.addScalar("id", Hibernate.LONG);
sqlQuery.addScalar("name", Hibernate.STRING);
sqlQuery.setResultTransformer(Transformers
.aliasToBean(Institutions.class));
List<Institutions> list = sqlQuery.list();
if (list.size() <= 0) {
Temp t = new Temp();
t.setId(0L);
if (id == -1) {
t.setName("请先选择机构");
} else {
t.setName("该机构没有分支");
}
lt.add(t);
return lt;
}
for (int i = 0; i < list.size(); i++) {
Institutions ins = list.get(i);
Temp t = new Temp();
t.setId(ins.getId());
t.setName(ins.getName());
lt.add(t);
}
return lt;
}
jsp层:
var val=$("#organization option:selected").val();
$.ajax({
type:"post",
url:"${ctx}/account/user/branchMap",
dataType:"json",
async:false,
data:{organizid:val},
success:function(data){
$("#branch").html("");
$.each(data,function(i,item){
$("#branch").append("<option value="+item.id+">"+item.name+"</option>");
});
}
});
然后在对应的spring-mvc.servlet.xml中添加配置
<!--
@ResponseBody之后返回字符串中中文可能会出现乱码 因为sping
mvc默认是text/plain;charset=ISO-8859-1,要支持中需做如下配置指定编码格式
-->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!--返回字符串格式json-->
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
只要后台查询查询的结果集是list<XXX>泛型的list集合然后把controller层标注上 @ResponseBody,前台调用此方法,并在$.ajax中标示为dataType:"json", async:false,即可。
以前,一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.
JavaScript 代码:
<script type="text/javascript"> $(document).ready(function(){ var saveDataAry=[]; var data1={"userName":"test","address":"gz"}; var data2={"userName":"ququ","address":"gr"}; saveDataAry.push(data1); saveDataAry.push(data2); $.ajax({ type:"POST", url:"user/saveUser", dataType:"json", contentType:"application/json", data:JSON.stringify(saveData), success:function(data){ } }); }); </script>
Java代码
@RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) @ResponseBody public void saveUser(@RequestBody List<User> users) { userService.batchSave(users); }
地址:http://blog.csdn.net/dcx903170332/article/details/17957579
最近做了一个spring+ajax 二级级联菜单,总是报各种错误,最后经过分析总结终于解决此问题,现在把问题展示给大家,以供分享。如有问题可以评论,肯定支持。
json需要引用的JSON包有:jackson-core-asl-1.9.13.jar,jackson-mapper-asl-1.9.13.jar,版本并不是固定的,只是这两个的版本一样就行了
controller层:
@RequestMapping(value = "branchMap")
@ResponseBody
public List<Temp> getBranchMap(HttpServletRequest request) {
String tmp = request.getParameter("organizid");
Long id = Long.parseLong(tmp);
return serviceManager.getBranchMap(id);
}
service层:
public List<Temp> getBranchMap(Long id) {
return institutionsDao.getBranchMap(id);
}
dao层:(其中Temp是临时类,就是institutions类想要的字段组成的类)
public List<Temp> getBranchMap(Long id) {
List<Temp> lt = new ArrayList<Temp>();
String sql = "select s.id,s.name from institutions s where s.parent=?";
Session session = this.getSession();
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.setLong(0, id);
sqlQuery.addScalar("id", Hibernate.LONG);
sqlQuery.addScalar("name", Hibernate.STRING);
sqlQuery.setResultTransformer(Transformers
.aliasToBean(Institutions.class));
List<Institutions> list = sqlQuery.list();
if (list.size() <= 0) {
Temp t = new Temp();
t.setId(0L);
if (id == -1) {
t.setName("请先选择机构");
} else {
t.setName("该机构没有分支");
}
lt.add(t);
return lt;
}
for (int i = 0; i < list.size(); i++) {
Institutions ins = list.get(i);
Temp t = new Temp();
t.setId(ins.getId());
t.setName(ins.getName());
lt.add(t);
}
return lt;
}
jsp层:
var val=$("#organization option:selected").val();
$.ajax({
type:"post",
url:"${ctx}/account/user/branchMap",
dataType:"json",
async:false,
data:{organizid:val},
success:function(data){
$("#branch").html("");
$.each(data,function(i,item){
$("#branch").append("<option value="+item.id+">"+item.name+"</option>");
});
}
});
然后在对应的spring-mvc.servlet.xml中添加配置
<!--
@ResponseBody之后返回字符串中中文可能会出现乱码 因为sping
mvc默认是text/plain;charset=ISO-8859-1,要支持中需做如下配置指定编码格式
-->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!--返回字符串格式json-->
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
只要后台查询查询的结果集是list<XXX>泛型的list集合然后把controller层标注上 @ResponseBody,前台调用此方法,并在$.ajax中标示为dataType:"json", async:false,即可。
相关文章推荐
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串--http://www.cnblogs.com/quanyongan/archive/2013/04/16/3024741.html
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串 demo
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串