很多情况下,前后端的数据传输使用的是json格式,包括:前端向后端提交的参数为json格式,后端返回的结果为json格式,SpringMVC为这种方式提供了良好的支持,实现方式做简单记录。
1、导入依赖
向pom.xml中的<dependencies></dependencies>
节点中添加依赖坐标,代码如下:
注:
如果项目不是MAVEN工程,只需要在https://mvnrepository.com/通过上文的坐标下载指定的jar,放入WEB-INF下的lib中即可。
1 |
|
为了说明问题方便,假设前端需要上传的json数据为User对象的数据,后端需要返回的数据为状态数据Result对象。
User对象的结构如下:
【
需要特别注意User对象中的birthday属性,它是一个日期类型,在json转换过程中需要考虑两个问题:
1、json字符串转换成Date对象时,需要按照什么格式进行字符串到Date对象的转换
2、Date对象转换成json字符串时,需要按照什么格式输出成json字符串
针对以上两个问题:
A、@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
表示Date对象转换成JSON字符串时需要输出的格式。
B、 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
表示JSON字符串转换成Date对象时需要转换的格式(格式不匹配会导致对象转换失败)
】1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private String username;
private String password;
// 此注解用于在Jackson将java对象转换成json字符串时需要用到的格式
"yyyy-MM-dd HH:mm:ss") (pattern =
/// 此注解用于在jackson将字符串转换成java对象时需要用到的格式
"yyyy-MM-dd HH:mm:ss") (pattern =
private Date birthday;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
Result对象的结构如下:
1 | /** |
2、写Controller
编写特定的Controller用于业务交互,代码如下:
其中@ResponseBody
表示直接返回字符串到前端,如果用@ResponseBody
修饰的方法返回的是一个对象,那么jackson将会把该对象转化成json对象,然后返回给前端;
@RequestBody
表示将前端发过来的json字符串封装到特定的java对象中
1 | import org.springframework.stereotype.Controller; |
3、编写前端Ajax请求
Ajax请求代码在20~30行。其余代码无关紧要。
1 | <html> |
4、总结
其中最重要的就是引入jackson相关的依赖包、@ResponseBody
、@RequestBody
。
@RequestBody
用于将请求中的json字符串转换成java对象;@ResponseBody
用于将java对象转换成json字符串。
其中,如果存在Date日期的转换问题,可以使用@DateTimeFormat
和@JsonFormat
解决。