Java将对象序列化 Transient

一、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进行过滤字段;

你可能感兴趣的:(Java将对象序列化 Transient)