Json和对象之间的转换
springMVC 数据格式转换
需要添加json转换依赖:比如fastjson
- 将对象转换为json数据格式
@ResponseBody
添加该注解的controller方法,字符串不会被视图解析器解析,会直接返回字符串格式
新建一个springmvc项目,并添加web框架支持
导入webmvc和fastjson依赖
- fastjson能方便的将对象格式转换为json格式
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>
配置web.xml
- 配置DispatcherServlet
- 绑定springmvc配置文件
- 所有请求都会经过该servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
配置springmvc配置文件
- 扫描包
- 开启注解支持
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--扫描controller-->
<context:component-scan base-package="com.rm.controller"/>
<!--开启注解驱动-->
<mvc:annotation-driven/>
</beans>
编写实体类
public class User {
private String name;
private String password;
public User() {
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
}
编写Controller
- @ResponseBody注解表明字符串格式不会被视图解析器解析
@Controller //该类被spring容器托管
public class MyController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
User user = new User("zhangsan", "123456");
String s = JSON.toJSONString(user);
return s;
}
}
配置tomcat

启动项目

SpringBoot 数据格式转换
不需要添加别的json数据转换依赖
@ResponseBody
- 添加 @ResponseBody 注解后,Spring Boot 会直接将对象转换为 json 格式并输出为响应信息
新建一个springboot项目
- 编写实体类
public class User {
private String name;
private String password;
}
- 编写controller
@Controller
public class MyController {
@ResponseBody
@RequestMapping("/hello")
public User hello(){
User user = new User();
user.setName("lisi");
user.setPassword("123456");
return user;
}
}
测试结果

@RequestBody
@RequestBody 接收前端发送的json数据格式并将参数转换为后端定义的对象
使用AJAX技术
导入thymeleaf模板启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>testMC</title>
</head>
<body>
<input id="name" name="name" placeholder="请输入姓名">
<input id="password" name="password" placeholder="请输入密码">
返回数据如下:
<p id="returnMessage"></p>
<!--点击提交按钮会到a方法-->
<a href="#" onclick="aaa()">提交请求</a>
</body>
<!--使用webjars导入jquery-->
<script src="webjars/jquery/3.5.1/jquery.js"></script>
<script type="text/javascript">
<!--$等价于JQuery-->
function aaa() {
//通过id选择器选择用户输入的数据,并转换为一个User对象
var name=$('#name').val();
var password=$('#password').val();
var user={
name:name,
password:password,
};
$.ajax({
//通过请求和后端进行绑定
url: 'world',
dataType: 'json',
type:'POST',
contentType:'application/json; charset=utf-8',
//后端从data中取数据(id选择器),键值对形式,值是前端的数据
data:JSON.stringify(user),
//成功或者失败都需要一个回调函数
success:function (result) {
//请求成功:显示在页面上
$('#returnMessage').html(JSON.stringify(result));
},
error:function () {
alert("错误");
}
});
}
</script>
</html>
controller
- @RequestBody 将json数据转换为java对象
- @ResponseBody 将java对象转换为json数据
@Controller
public class MyController {
//接收前端传递对象数据
@ResponseBody
@PostMapping("/world")
public User world(@RequestBody User user){
System.out.println(user);
return user;
}
@RequestMapping("/test")
public String test2(){
return "test";
}
}
控制台结果

浏览器界面


浙公网安备 33010602011771号