json格式的字符串(传递数据的一种载体)
json格式字符串 <----> js对象 js中的JSON类型 JSON.stringify(obj); JSON.parse(str);json格式字符串 <----> java对象 使用第三方jar来完成即可例子:
ajex请求给服务器发送JSON格式字符串,服务器接受,利用第三方jar把JSON格式字符串转换成对象,然后返回JSON格式字符串,js接受,jQuery自动把它转换成js对象
拿到的都是对象,但传输的都是字符串(JSON格式)测试页面1(json1.jsp):
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";%>json1.jsp json1.jsp
测试页面2(json2.jsp):
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";%>json2.jsp json2.jsp
后台的控制类:
package com.briup.web.annotation;import java.io.Writer;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.briup.bean.User;@RequestMapping("/request_body")@Controllerpublic class RequestBodyController { /* * @RequestBody注解的使用 * 作用:获得请求体中的内容 */ @RequestMapping("/test1") public String test1(@RequestBody String str)throws Exception{ System.out.println("RequestBodyController test1.."); //id=1&name=tom&age=20 System.out.println("str = "+str); return "test"; } //@RequestBody注解一般结合ajax,然后以json格式字符串进行传值 //因为正常情况下,使用@RequestBody注解获得了表单中的值:id=1&name=tom&age=20 //这个值id=1&name=tom&age=20,我们获取后作用不大 //但是如果从请求体中获得一个json格式的字符串,那就不一样了 //因为可以容易的把json格式字符串转换为java的对象 //需要引入第三方jar包,才可以把json字符串转为java对象 @RequestMapping("/test2") public void test2(@RequestBody User u,Writer out)throws Exception{ System.out.println("RequestBodyController test2.."); System.out.println("u = "+u); out.write("hello"); out.flush(); } //给ajax请求返回json格式的字符串 @RequestMapping("/test3") public void test3(@RequestBody User u,Writer out)throws Exception{ System.out.println("RequestBodyController test3.."); System.out.println("u = "+u); String jsonStr = "{\"msg\":\"hello world\"}"; out.write(jsonStr); out.flush(); } //@ResponseBody表示把方法的返回值放到响应体中 @ResponseBody @RequestMapping("/test4") public String test4(@RequestBody User u)throws Exception{ System.out.println("RequestBodyController test4.."); System.out.println("u = "+u); String jsonStr = "{\"msg\":\"hello world\"}"; return jsonStr; } @ResponseBody @RequestMapping("/test5") public User test5(@RequestBody User u)throws Exception{ System.out.println("RequestBodyController test5.."); System.out.println("u = "+u); //对象会被自动转为json格式字符串 User user = new User(2L,"tom2",32); return user; } }
总结:
@RequestBody注解
可以接收客户端ajax请求中的json数据并且转换为对象,但是只能接收post请求中的数据,因为post请求的数据在请求体中(request-body). 需要引入操作json的相关jar包: jackson-core-2.8.5.jar jackson-annotations-2.8.5.jar jackson-databind-2.8.5.jar 或者 jackson-mapper-asl-1.9.13.jar jackson-core-asl-1.9.13.jar
客户端使用ajax发送json数据给Controller,Controller里面接收json数据并且转换为对象
1.ajax请求发送的时候要指定为post方式 2.ajax请求发送的时候要指定contentType:"application/json" 3.ajax请求发送的时候要把json对象转换为字符串再发送 4.Controller中要使用@RequestBody指定接收数据的参数 5.项目中要引入json相关的jar包 6.如果此ajax请求还希望Controller返回的数据也是json格式的,那么需要在发送ajax请求的时候指定dataType:"json", 7.Controller中的方法要返回json格式的数据给客户端,可以使用@ResponseBody标签 或者 在方法中自己使用response对象获得io流给客户端写回去 注意: ajax发送请求的时候,请求头中的Content-Type默认值是: application/x-www-form-urlencoded,表示当前请求中如果有数据的话,将会是key=value&key=value的形式注意:在javascript中,json对象和字符串之间的转换:
JSON.stringify(obj)将JSON对象转为字符串。 JSON.parse(string) 将字符串转为JSON对象;