java中json进阶_JSON数据交互【java编程进阶】 - 贪吃蛇学院-专业IT技术平台

Spring MVC 在数据绑定的过程中需要对传递数据的格式和类型进行转换,它既可以转换 String 等类型的数据,也可以转换 JSON 等其他类型的数据。本节将针对

Spring MVC 中 JSON 类型的数据交互进行讲解。

JSON 概述 JSON(

JavaScript Object Notation, JS 对象标记)是一种轻量级的数据交换格式。与 XML 一样,JSON 也是基于纯文本的数据格式。它有对象结构和数组结构两种

数据结构。

1)对象结构 对象结构以“{”开始、以“}”结束,中间部分由 0 个或多个以英文“,”分隔的 key/value 对构成,key 和 value 之间以英文“:”分隔。对象结构的语法结构如下:

{

key1:value1,

key2:value2,

...

} 其中,key 必须为 String 类型,value 可以是 String、Number、Object、Array 等数据类型。例如,一个 person 对象包含姓名、密码、年龄等信息,使用 JSON 的表示形式如下:

{

"pname":"张三",

"password":"123456",

"page":40

}

2)数组结构 数组结构以“[”开始、以“]”结束,中间部分由 0 个或多个以英文“,”分隔的值的列表组成。数组结构的语法结构如下:

{

value1,

value2,

...

} 上述两种(对象、数组)数据结构也可以分别组合构成更加复杂的数据结构。例如,一个 student 对象包含 sno、sname、hobby 和 college 对象,其 JSON 的表示形式如下:

{

"sno":"201802228888",

"sname":"张三",

"hobby":["篮球","足球"],

"college":{

"cname":"清华大学",

"city":"北京"

}

}

JSON 数据转换 为实现浏览器与控制器类之间的 JSON 数据交互,Spring MVC 提供了 MappingJackson2HttpMessageConverter 实现类默认处理 JSON 格式请求响应。该实现类利用 Jackson 开源包读写 JSON 数据,将

Java 对象转换为 JSON 对象和 XML 文档,同时也可以将 JSON 对象和 XML 文档转换为 Java 对象。

在使用注解开发时需要用到两个重要的 JSON 格式转换注解,分别是 @RequestBody 和 @ResponseBody。

@RequestBody:用于将请求体中的数据绑定到方法的形参中,该注解应用在方法的形参上。

@ResponseBody:用于直接返回 return 对象,该注解应用在方法上。

下面通过一个案例来演示如何进行 JSON 数据交互,具体步骤如下。

1)创建应用并导入相关 JAR 包 创建 springMVCDemo05 应用,然后将 Spring MVC 的相关 JAR 包、JSON 转换包添加到 springMVCDemo05 的 lib 目录下。springMVCDemo05 的 lib 目录如图 1 所示。

b89af489c7ed05a5e40b0fc478865d56.png

图 1  springMVCDemo05的相关JAR包

2)配置 web.xml 在 web.xml 文件中对 Spring MVC 的前端控制器等信息进行配置,其代码和《

数据绑定和表单标签的应用》教程中的 SpringMVCDemo04 一样,这里不再赘述。

3)配置 Spring MVC 的核心配置文件 在 WEB-INF 目录下创建 Spring MVC 的核心配置文件 springmvc-servlet.xml,代码如下:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd">

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

4)创建 POJO 类 在 src 目录下创建 pojo 包,并在该包中创建 POJO 类 Person,代码如下:

package pojo;

public class Person {

private String pname;

private String password;

private Integer page;

//省略setter和getter方法

}

5)创建 JSP 页面测试 JSON 数据交互 在页面 index.jsp 来测试 JSON 数据交互,代码如下:

pageEncoding="UTF-8"%>

用户名:

密码:

年龄:

function testJson() {

//获取输入的值pname为id

alert($("#pname").val());

var pname = $("#pname").val();

var password = $("#password").val();

var page = $("#page").val();

$.ajax({

//请求路径

url : "${pageContext.request.contextPath }/testJson",

//请求类型

type : "post",

//data表示发送的数据

data : JSON.stringify({

pname : pname,

password : password,

page : page

}), //定义发送请求的数据格式为JSON字符串

contentType : "application/json;charset=utf-8",

//定义回调响应的数据格式为JSON字符串,该属性可以省略

dataType : "json",

//成功响应的结果

success : function(data) {

if (data != null) {

alert("输入的用户名:" + data.pname + ",密码:" + data.password

+ ", 年龄:" + data.page);

}

}

});

}

在 index.jsp 页面中编写了一个测试 JSON 交互的表单,当单击“测试”按钮时执行页面中的 testJson() 函数。在该函数中使用了 jQuery 的 AJAX 方式将 JSON 格式的数据传递给以“/testJson”结尾的请求中。

因为在 index.jsp 中使用的是 jQuery 的 AJAX 进行的 JSON 数据提交和响应,所以还需要引入 jquery.js 文件。本例引入了 WebContent 目录下 js 文件夹中的 jquery-3.2.1.min.js,读者可以在源程序中找到该文件。

6)创建控制器类 在 src 目录下创建 controller 包,并在该包中创建一个用于用户操作的控制器类 TestController,代码如下:

package TestController;

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 pojo.Person;

@Controller

public class TestController {

/**

* 接收页面请求的JSON参数,并返回JSON格式的结果

*/

@RequestMapping("testJson")

@ResponseBody

public Person testJson(@RequestBody Person user) {

// 打印接收的JSON格式数据

System.out.println("pname=" + user.getPname() + ",password="

+ user.getPassword() + ",page" + user.getPage());

;

// 返回JSON格式的响应

return user;

}

} 在上述控制器类中编写了接收和响应 JSON 格式数据的 testJson 方法,方法中的 @RequestBody 注解用于将前端请求体中的 JSON 格式数据绑定到形参 user 上,@ResponseBody 注解用于直接返回 Person 对象(当返回 POJO 对象时默认转换为 JSON 格式数据进行响应)。

7)运行 index.jsp 页面,测试程序 将 springMVCDemo05 应用发布到 Tomcat 服务器并启动服务器,在浏览器中访问地址“http://localhost:8080/springMVCDemo05/index.jsp”,运行效果如图 2 所示。

e39d44d9cd29b9b2cb925ea475841191.png

图 2  index.jsp 测试页面

在图 2 所示的输入框中输入信息后单击“测试”按钮,当程序正确执行时页面将弹出显示输入信息的对话框,如图 3 所示。

f879e6b0a5f220296182845134e5fd58.png

图 3  index.jsp 正确执行的效果

同时,MyEclipse 的控制台将打印出相应数据,如图 4 所示。

1818c33710b5ba77a866b46eda02b901.png

图 4  MyEclipse 运行结果

从图 3 和图 4 所示的结果可以看出,编写的代码可以将 JSON 格式的请求数据转换为方法中的 Java 对象,也可以将 Java 对象转换为 JSON 格式的响应数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值