在开发过程中经常会用到序列化,此时就需要实现Serializable
接口
@Data
public class User implements Serializable{
private static final long serialVersionUID = -4827686424318178402L;
private int userId;
private String userName;
}
@Data是
lombok
注解,作用是自动生成get
、set
方法
当前的需求是不想将userName
字段序列化,该怎么办呢?
@Data
public class User implements Serializable{
private static final long serialVersionUID = -4827686424318178402L;
private int userId;
private transient String userName;
}
此时就用到了
transient
关键字,表示userName
不参与序列化
测试,未使用transient
关键字的情况
@Slf4j
@Data
public class User {
private int userId;
private String userName;
public static void main(String[] args) {
User u = new User();
u.setUserId(1);
u.setUserName("admin");
log.info("json字符串:{}",JSON.toJSONString(u));
}
}
@Slf4j是
lombok
注解,作用是自动生成log
对象
因为FastJson
会自动序列化对象,故删除了实现Serializable
的内容
运行结果
json字符串:{"userId":1,"userName":"admin"}
测试,使用transient
关键字的情况
@Slf4j
@Data
public class User {
private int userId;
private transient String userName;
public static void main(String[] args) {
User u = new User();
u.setUserId(1);
u.setUserName("admin");
log.info("json字符串:{}",JSON.toJSONString(u));
}
}
运行结果
json字符串:{"userId":1}
另外
transient
只能修饰变量且非本地变量- 被
static
修饰的变量不能被序列化
测试下static
的情况
@Slf4j
@Data
public class User {
private int userId;
private transient String userName;
private static String password = "qwe123";
public static String getPassword() {
return password;
}
public static void setPassword(String password) {
User.password = password;
}
public static void main(String[] args) {
User u = new User();
u.setUserId(1);
u.setUserName("admin");
log.info("password={}",User.password);
log.info("json字符串:{}",JSON.toJSONString(u));
}
}
运行结果
password=qwe123
json字符串:{"userId":1}
网友评论