JSON数据开发
基本概念
Json 在企业开发中已经作为通用的接口参数类型,在页面(客户端)解析很方便。SpringMVC 对于json 提供了良好的支持,这里需要修改相关配置,添加 json 数据支持功能
@RequestBody
该注解用于读取 Request 请求的 body 部分数据,使用系统默认配置的 HttpMessageConverter 进行解析,然后把相应的数据绑定到要返回的对象上 ,再把 HttpMessageConverter 返回的对象数据绑定到controller 中方法的参数上。
@ResponseBody
该注解用于将 Controller 的方法返回的对象,通过适当的 HttpMessageConverter 转换为指定格式后,写入到 Response 对象的 body 数据区。
返回的数据不是 html 标签的页面,而是其他某种格式的数据时(如 json、xml 等)使用(通常用于ajax 请求)。
相关配置
<!-- 添加json 依赖jar包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.0</version>
</dependency>
<!-- mvc 请求映射 处理器与适配器配置 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
注解使用
@ResponseBody
package com.xxxx.springmvc.controller;
import com.xxxx.springmvc.vo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;
/**
* JSON配置
* @ResponseBody
* 返回的数据是JSON格式
*/
@Controller
public class JsonController {
/**
* @ResponseBody 返回的是JOSN格式的数据,返回JavaBean对象
* 注解设置在方法体上
* @return
*/
@RequestMapping("query01")
@ResponseBody
public User query01(){
User user = new User();
user.setId(1);
user.setUserName("admin");
user.setUserPwd("123456");
return user;
}
/**
* @ResponseBody 返回的是JOSN格式的数据,返回JavaBean对象
* 注解设置在方法的返回对象之前,修饰符之后
* @return
*/
@RequestMapping("query02")
public @ResponseBody User query02(){
User user = new User();
user.setId(1);
user.setUserName("admin");
user.setUserPwd("123456");
return user;
}
/**
* @ResponseBody 返回的是JOSN格式的数据,返回的是JOSN格式的数据,返回集合
* @return
*/
@RequestMapping("query03")
@ResponseBody
public List<User> query03(){
User user = new User();
user.setId(1);
user.setUserName("admin");
user.setUserPwd("123456");
User user2 = new User();
user2.setId(2);
user2.setUserName("zhangsan");
user2.setUserPwd("456789");
User user3 = new User();
user3.setId(3);
user3.setUserName("lisi");
user3.setUserPwd("789789");
List<User> userList = new ArrayList<>();
userList.add(user);
userList.add(user2);
userList.add(user3);
return userList;
}
}
@RequestBody
@RequestBody 注解常用来处理 content-type 不是默认的 application/x-www-form-urlcoded 类型的内容,比如说:application/json 或者是application/xml 等。一般情况下来说常用其来处理application/json 类型。
@RequestBody接收的是一个 json 格式的字符串,一定是一个字符串。
通过 @RequestBody 可以将请求体中的 JSON 字符串绑定到相应的 bean 上,当然,也可以将其分别绑定到对应的字符串上。
/**
* 要求前台传递json格式的数据
* @param user
* @return
*/
@RequestMapping("query04")
@ResponseBody
public User query04(@RequestBody User user) {
System.out.println(user);
return user;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSON处理</title>
<%-- 引入Jquery的核心JS文件 --%>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
</head>
<body>
<input type="button" value="JSON数据测试" onclick="test()"/>
<script type="text/javascript">
/*** 请求传递JSON格式的数据 * 返回JSON格式的数据 */
function test(){
$.ajax({
//请求方式 Get|Post
type: "post",
// 请求路径
url: "query04",
// 预期服务器返回的数据类型
dataType: "json",
// 设置服务器请求类型的数据类型为JSON格式
contentType: "application/json;charset=utf-8",
// 传递给服务器的参数
data:'{"userName":"admin","userPwd":"123456"}',
// 回调函数,接收服务器返回的响应的结果 (函数中的形参用来接收服务器返回的数据)
success:function(data){
console.log(data);
}
});
}
</script>
</body>
</html>