在开发过程中经常会用到序列化,此时就需要实现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}








网友评论