第一节:SpringMVC 处理 JSON 您所在的位置:网站首页 json和javascript对象 第一节:SpringMVC 处理 JSON

第一节:SpringMVC 处理 JSON

2023-12-13 15:26| 来源: 网络整理| 查看: 265

一、JSON   1、JSON 简介         JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。        JSON 是采用完全独立于编程语言的文本格式来存储和表示数据,JSON 数据格式,易于阅读和编写,也易于机器解析和生成,并有效地提上了网络传输效率。   2、JSON 语法     JSON 是一个序列化的对象或数组。     对象由花括号括起来的逗号分割的成员构成,成员是字符串键和值由逗号分割的键值对组成。     值 可以是 对象、数组、数字、字符串或者三个字面值(false、true、null)中的一个,值的字面值中的英文必须使用小写。 {"name": "John Doe", "age": 18, "address": {"country" : "china", "zip-code": "10000"}}

  

  3、JSON 与 JS 对象的关系

    JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。

var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的 var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串

  

  4、JSON 和 JS 对象互转

    要实现从 JSON 字符串转换到 JS 对象,使用 JSON.parse() 方法

var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}

  

    要实现从 JS 对象转换到 JSON 字符串,使用 JSON.stringify() 方法

var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'

  

  5、JSON 的常用类型         (1)JSON 对象     对象:对象在 JS 中使用花括号包裹 {} 起来的内容,数据结构为{key1:value1, key2:value2,...} 的键值对结构。     key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示,值的类型可以是任意类型。           (2)JSON 数组                 数组:数组在 JS 中是方括号[] 包裹起来的内容,数据结构为 ["value1","value2"...] 的索引结构。                 在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。   6、与 Java 对象转换         (1)JavaBean 和 Map 对象转换成 JSON 对象;         (2) List 对象转换成 json 数组。   二、SpringMVC支持Ajax   1、处理 JSON 格式数据

    (1)导入jar 包

      常用的 JSON 解析器:Gson、fastJson、JackSon、JsonLib(依赖于其它的四个 jar 包)       SpringMVC 中是使用 JackSon 来解析 json 的。所以导入 jackson 的 jar 包就行了。               下载地址: http://wiki.fasterxml.com/JacksonDownload/             导入的 jar 包: jackson-annotations-2.1.5.jar jackson-core-2.1.5.jar jackson-databind-2.1.5.jar

 

       Maven 方式: com.fasterxml.jackson.core jackson-core 2.9.8 com.fasterxml.jackson.core jackson-annotations 2.9.8 com.fasterxml.jackson.core jackson-databind 2.9.8

 

    (2)配置文件

      在 SpringMVC 配置文件中加入 MVC 驱动标签

 

  2、使用@ResponseBody注解

    在处理请求的方法上加上 注解 @ResponseBody,将要转换为 JSON 且响应到客户端的数据,直接作为该方法的返回值返回。

/** * springMVC处理json的四个条件: * 1、导入jackson的jar * 2、在 springMVC 的配置文件中开启 MVC 驱动 * 3、在处理 ajax 请求的方法上加上注解 @ResponseBody (springMVC 对 JSON 的支持) * 4、将要转换为 json 且响应到客户端的数据,直接作为该方法的返回值返回 * @return */ @RequestMapping(value="/getAllEmps") @ResponseBody() public Collection ajaxGetAll() { Collection emps = employeeDao.getAll(); return emps; }

 

  3、案例

    从页面发起 Ajax 请求:

Ajax获取员工信息 $("#getEmps").click(function () { //发送ajax请求 $.ajax({ url : "${ctp}/getAllEmps", contentType : "text/json", type : "GET", success : function (data) { console.log(data); $("#content").empty(); $.each(data, function() { var empInfo = this.lastName + "-->" + this.birth + "-->" + this.gender; $("#content").append(empInfo + ""); }); }, error : function (data) { console.log("请求出错"); } }); //禁用默认行为 return false; });

 

    控制器返回 JSON 数据:

@ResponseBody @RequestMapping(value = "/getAllEmps") public Collection ajaxGetAll() { Collection emps = employeeDao.getAll(); return emps; }

 

  4、使用 Jackson 的相关注解

    Jackson 的 包中同时提供了一些相关注解,可以做更多的操作:

    

     可以使用 @JsonIgnore 来忽略某一个属性,使用 @JsonFormat 来格式化属性,直接加载 JavaBean 的相关属性上面就可以了。

    示例:

@JsonFormat(pattern = "yyyy-MM-dd") private Date birth = new Date(); @JsonIgnore private Department department;

 

三、@RequestBody 与 @ResponseBody   1、@RequestBody

    @RequestBody 用于获取请求体中的内容

    示例:

    表单提交:

 

    获取请求体内容:

/** * @RequestBody:请求体,获取一个请求的请求体 * @RequestParam:从请求中获取请求参数的值 * @return */ @RequestMapping(value = "/testRequestBody") public String testRequestBody(@RequestBody String body) { System.out.println("请求体:" + body); return "success"; }

 

    注意:POST 方式的提交才会有请求体,GET 方式的提交参数都在地址栏。

  2、@ResponseBody

    @ResponseBody:将返回的数据放在响应体中。

 

  3、Ajax 发送 JSON 数据

    可以通过 Ajax 向服务器发送 JSON 数据:

    页面提交:

发送Emp的JSON数据 $("#saveEmp").click(function () { var emp = { lastName : "Tom", email : "[email protected]", gender : "1", birth : new Date(), salary : "3000" }; var empStr = JSON.stringify(emp); alert(empStr); alert(typeof empStr); //发送 ajax 请求,请求带的数据是 json $.ajax({ url : "${ctp}/testRequestBodyEmp", type : "POST", data : JSON.stringify(emp), contentType : "application/json", success : function (data) { alert(data); }, error : function (data) { alert("请求出错"); } }); return false; });

 

    控制器方法:

/** * @ResponseBody 可以把对象转为json数据,返回给浏览器 * * @RequestBody 接收 json 数据,封装为入参对象 * * @param emp * @return */ @RequestMapping(value = "/testRequestBodyEmp") public String testRequestBodyEmp(@RequestBody Employee emp) { System.out.println("请求体= " + emp); return "success"; }

 

    使用了 @RequestBody 会把提交的 JSON 数据封装为入参对象。

 

四、总结     1、导入 Jackson 的 jar 包;     2、在 springMVC 的配置文件中开启 MVC 驱动      3、在处理ajax请求的方法上加上注解@ResponseBody     4、将要转换为json且响应到客户端的数据,直接作为该方法的返回值返回 五、扩展         常见错误:          400:客户端发送请求和数据,服务器端无法接受参数,无法做出处理;          406:服务器给客户端发送的数据,客户端无法处理          405:客户端与服务器端请求方式和接受方式不一致,不匹配          404:请求资源路径错误或资源不存在    


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有