java返回json ajax_Java笔记之SpringMVC(八):ajax发送json数据和返回json数据

0.说在前面

1.在原项目的基础上再导入需要的jar包,并Build Path

ab8100979fb2726aee681ca001b48553.png

2.新建包com.springmvc.demo.bean,并新建People类

packagecom.springmvc.demo.bean;public classPeople {privateString name;privateInteger age;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicInteger getAge() {returnage;

}public voidsetAge(Integer age) {this.age =age;

}

@OverridepublicString toString() {return "People [name=" + name + ", age=" + age + "]";

}

}

3.新建JsonController类

packagecom.springmvc.demo.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.ResponseBody;importcom.springmvc.demo.bean.People;

@Controllerpublic classJsonController {

@RequestMapping("/initJson.action")publicString init(){return "json";

}/*** @RequestBody: 注解用于将json字符串信息映射到People类的字段上进行转换

* @ResponseBody: 注解用于将实体对象转换成json格式

*@parampeople

*@return

*/@RequestMapping(value="/json.action")public@ResponseBody People jsonTest(@RequestBody People people){

System.out.println(people);returnpeople;

}

}

4.新建json.jsp页面

Insert title here
年龄:

发送

functiondoPost(){varname=document.getElementById("name").value;varage=document.getElementById("age").value;

$.ajax({

url:"json.action",

type:"post",//请求信息是严格的json字符串形式

data:JSON.stringify({"name":name,"age":age}),//设置请求参数为json字符串,编码为UTF-8

contentType:"application/json;charset=utf-8",//设置返回值为json格式,也可以不设置

dataType:"json",

success:function(data){

alert(data.name+"---"+data.age);

}

});

}

5.由于原来的项目配置了拦截器,里面的postHandle方法中对controller返回的ModelAndView对象中设置了新的信息,这对返回json数据的请求是不合适的,因为这里的ModelAndView对象是null,会报空指针异常,所以把设置信息的那一块注释掉

@Overridepublic voidpostHandle(HttpServletRequest request, HttpServletResponse response, Object handler,

ModelAndView modelAndView)throwsException {

System.out.println("postHandle在Controller被调用返回ModelAndView之后被调用......");//在返回的ModelAndView对象中新加一个数据对象//modelAndView.addObject("currentDate", new Date());

}

fee756babd22d30bfd328151e1b54ce6.png

5feb0cf872341d7a47f5f3ed57b6f0a9.png

从页面信息和后台打印信息可以看出ajax发送json数据和返回json数据都得到实现.

7.踩坑

以本例来说:

(1). ajax请求

data属性的值要是严格的Json字符串形式,不能写成{"name":name,"age":age}这种形式,要是双引号包围的字符串,可以使用JSON.stringify({"name":name,"age":age})进行转换;

contentType属性值要设置成"application/json;charset=utf-8";

(2). jar包

新导入的三个jar包是必须的.这一块填坑花了好一段时间,搜了好些教程有说部分jar包不需要的,自己试的死活不行,不知道为啥,这三个jar包都导入了请求就通过了;

(3). springmvc.xml

这里面要添加标签项,添加这个不仅会添加上注解形式的处理器映射器和处理器适配器,还会添加一系列的消息转换器,其中就包括json格式的消息转换器

如果不添加这个标签,需要声明注解适配器以及为配置json格式的消息转换器:spring3与spring4及以上配置稍微不同,就是消息转换器名称里Jackson后面多了一个2

spring4以及以上

spring3

从工作量上来说还是添加标签项比较容易.

(4).Controller中的方法上

将json字符串映射到实体类属性上要使用注解@RequestBody;

返回值类型为实体类,要转化成json格式,需要在方法上或者方法的返回值类型之前使用注解@ResponseBody.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值