1.导入jackson依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
2.为实体类属性提供getter和setter方法
getter和setter方法在jackson用于对对象的序列化和反序列化,那什么是序列化和反序列化呢?
序列化:指将对象的状态转换为字节流的过程,以便进行存储、传输或在网络上进行交互。在序列化过程中,对象的状态被编码为一连串的字节,可以保存到磁盘、数据库或通过网络发送给远程系统。
- 在这里就是将实体类转换为json数据格式。
反序列化:将字节流恢复为对象的过程,将序列化的字节流重新转换为对象的状态。反序列化过程通过将字节流解码,重新创建对象,并恢复其状态。
- 在这里就是将前端发往后台的json封装为对象的过程
3.相关注解的使用
- 如果说不想提供getter和setter方法,也是可以的
@JsonProperty 注解用于定义 Java 对象中属性与 JSON 字段之间的映射关系,对java对象进行序列化。
例如有以下实体类:
public class User {
@JsonProperty("name")
private String userName;
}
@JsonProperty(“name”) 注解将 Java 对象中的 userName 属性映射到 JSON 字段名为 “name” 的字段。可以省去getter方法。假如有一个通过反射实例化出来的一个该类对象其username的value为“jack”那么将该类的实例化对象return到前端后jackson会将其解析为以下格式的json数据:
{
"name":"jack"
}
当然,如果在使用该注解的同时提供了getter方法依旧是注解优先,若没有该注解则通过相应getter方法使用默认属性名作为json的字段名。
@JsonAlias 注解用于指定多个可能的 JSON 字段名称与 Java 对象属性的映射关系,它可以用于反序列化操作。
例如在实体类中又加入了一条@JsonAlias注解,那么可以省去setter方法:
public class User {
@JsonProperty("name")
@JsonAlias({"my_name", "nick_name"})
private String userName;
}
如果后台接收到来自前端的以下两条json数据:
{
"my_Name":"jack"
}
{
"nick_name":"jack"
}
那么这两条json数据都可以被jackson反序列化为一个userName属性为jack的实例化对象。