现如今由于移动互联网的兴起,简洁的JSON格式成为很多系统之间进行交互的主要格式。SpringMVC为开发者提供了一种简洁的实现不同数据格式交互的机制(JSON、XML以及其他数据格式),其会将前台传来的JSON/XML等格式信息自动转换为相应的包装类,或者将输出的信息转换为JSON/XML等格式的数据。
SpringMVC主要利用类型转换器(MessageConverter)将前台信息转换成开发者需要的格式。然后在相应的Controller方法接收参数前添加@RequestBody注解,进行数据转换,或在方法的返回值类型处添加@ResponseBody注解,将返回信息转换成相关格式的数据。
@RequestBody注解的特点就是,根据请求参数的Content-Type决定是否将相关格式转换至包装类,如果Content-Type是目标类型,就进行转换。这里转换的是JSON数据,所有要求将前端请求的Content-Type指定为“application/json”类型,而普通key/value请求参数的Content-Type默认为“application/x-www-form-urlencoded”类型。
【实例】使用SpringMVC实现JSON交互。
SpringMVC对于JSON的解析和组装是基于开源工具类jackson的,所以要使用SpringMVC进行JSON数据交互,必须引入jackson的3个依赖jar包:jackson-core.jar、jackson-annotations.jar、jackson-databind.jar。将这3个jar包引用到项目中。
如果使用Maven,则pom.xml文件配置如下:
com.fasterxml.jackson.core
jackson-core
2.9.9
com.fasterxml.jackson.core
jackson-databind
2.9.9
com.fasterxml.jackson.core
jackson-annotations
2.9.9
引入相关的依赖jar包后,需要在SpringMVC核心配置文件springmvc.xml中,为处理器适配器(HandlerAdapter)配置类型转换器列表MessageConverter,并在其中添加需要的类型转换器。这样当请求到达处理器适配器层时,配置的@RequestBody注解与@ResponseBody注解就会利用具体的类型转换器MessageConverter将请求信息转换为指定的格式。具体配置如下:
但要注意的是,如果配置了
使用
(1)创建用户信息参数类(UserParam.java),用于接收前端请求的参数。
package com.pjb.mvc.model;
/**
* 用户信息参数类
* @author pan_junbiao
**/
public class UserParam
{
private String userName; //用户名称
private String password; //用户密码
//省略getter与setter方法...
}
(2)创建用户信息模型类(UserModel.java),用于保存用户信息并返回给页面。
package com.pjb.mvc.model;
/**
* 用户信息模型类
* @author pan_junbiao
**/
public class UserModel
{
private int userId; //用户ID
private String userName; //用户名称
private String blogUrl; //博客地址
private String remark; //备注信息
//省略getter与setter方法...
}
(3)创建控制器类,并实现获取JSON格式的登录用户信息的方法。
package com.pjb.mvc.controller;
import com.pjb.mvc.model.UserModel;
import com.pjb.mvc.model.UserParam;
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;
/**
* JSON控制器类
* @author pan_junbiao
**/
@Controller
@RequestMapping("json")
public class JsonController
{
/**
* 获取JSON格式的登录用户信息
*/
@RequestMapping(value = "getLoginUser", method = RequestMethod.POST)
@ResponseBody
public UserModel getLoginUser(@RequestBody UserParam userParam)
{
UserModel userModel = null;
//判断登录信息
if (userParam.getUserName().equals("pan_junbiao的博客") && userParam.getPassword().equals("123456"))
{
userModel = new UserModel();
userModel.setUserId(1);
userModel.setUserName("pan_junbiao的博客");
userModel.setBlogUrl("https://blog.csdn.net/pan_junbiao");
userModel.setRemark("您好,欢迎访问 pan_junbiao的博客");
}
//返回结果
return userModel;
}
}
使用JQuery提供的Ajax功能请求,关键代码:
//加载数据钮事件
$("#btnLoad").click(function () {
//请求参数对象
var params = {};
params.userName = "pan_junbiao的博客";
params.password = "123456";
//执行Ajax请求
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/json/getLoginUser.action",
dataType: "json",
contentType: "application/json; charset=UTF-8",
data: JSON.stringify(params),
success: function (result) {
//绑定数据
$("#td_userId").html(result.userId);
$("#td_userName").html(result.userName);
$("#td_blogUrl").html(result.blogUrl);
$("#td_remark").html(result.remark);
}
});
});
创建测试页面(userJson.jsp),完整的测试代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
SpringMVC实现JSON交互
SpringMVC实现JSON交互
用户ID:
用户名称:
博客地址:
备注信息:
执行结果:
第二种测试方法,使用Postman工具进行测试。
执行结果: