一、transient使用小结
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
科普下 序列化、反序列化、持久层、持久化,
序列化实体类变成json等格式,
反序列化就是json变成实体类,
持久层就是保存到数据库,
持久化保存到数据库的数据的特性。
例子:
public class TransientTest {
public static void main(String[] args) {
User user = new User("张三", 11);
System.out.println(user.toString());
String s = JSON.toJSONString(user);
System.out.println(s);
}
}
class User {
private transient String name;
private Integer age;
public User() {
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
输出
User{name='张三', age=11}
{"age":11}
二、使用@ResponseBody,transient字段能被序列化么?
使用@ResponseBody, 字段上使用 transient
不能过滤
@ResponseBody返回的格式由很多因素决定。
常用的返回json格式。如果使用的jackson convert可以通过 @JsonIgnore
进行过滤字段;
网友评论