gpt4 book ai didi

java - 如何在 Javabean 中将属性标记为 transient 以避免被 XMLEncoder 序列化?

转载 作者:搜寻专家 更新时间:2023-11-01 02:14:41 25 4
gpt4 key购买 nike

在变量声明上使用“transient”关键字或在 getter 上使用“@Transient”不会阻止 XMLEncoder 序列化属性。我发现告诉 XMLEncoder 不要序列化特定属性的唯一方法是使用如下代码:

BeanInfo info = Introspector.getBeanInfo(MyClass2.class);
PropertyDescriptor[] propertyDescriptors = info.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; ++i) {
PropertyDescriptor pd = propertyDescriptors[i];
if (pd.getName().equals("props")) {
pd.setValue("transient", Boolean.TRUE);
}
}

真的吗???有没有不需要运行时代码循环遍历所有属性的更简单的方法?像 transient 修饰符这样的东西会摇滚!

这是一个 JavaBean,它的所有属性都由 XMLEncoder 序列化,尽管使用了“transient”:

import java.io.Serializable;
import java.beans.XMLEncoder;

public class TestJavaBeanSerialization implements Serializable {
public TestJavaBeanSerialization() {}
private transient String myProp1 = null;
private String myProp2 = null;
@Transient public String getMyProp1() { return myProp1; }
public void setMyProp1(String a) { myProp1 = a; }
public String getMyProp2() { return myProp2; }
public void setMyProp2(String a) { myProp2 = a; }

public static void main( String[] args ) {
TestJavaBeanSerialization myObj = new TestJavaBeanSerialization();
myObj.setMyProp1("prop 1");
myObj.setMyProp2("prop 2");
XMLEncoder encoder = new XMLEncoder(System.out);
encoder.writeObject(myObj);
encoder.close();
}

}

这是运行这个程序的输出:

<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.6.0_29" class="java.beans.XMLDecoder">
<object class="TestJavaBeanSerialization">
<void property="myProp1">
<string>prop 1</string>
</void>
<void property="myProp2">
<string>prop 2</string>
</void>
</object>
</java>

更新

我仍然没有收到原始问题的明确答案。人们不断引用这篇文章,但它并不清楚,也没有人提供对 API 或规范的引用,明确指出将属性标记为 transient 的唯一方法是遍历所有属性并调用“setValue”。

最佳答案

你用错了@Transient

应该使用 java.beans.Transient 作为注解。 javax.persistence.Transient 仅在数据库持久性上下文中受到尊重,而不是 BeanInfo 序列化。

关于java - 如何在 Javabean 中将属性标记为 transient 以避免被 XMLEncoder 序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8813631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com