您的位置:首页 > 编程语言 > Java开发

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 代码:



<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,即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: