xstream javabean设置属性默认值的问题
2014-02-12 00:00
197 查看
在xstream反序列化使用过程中发现,如果xml无该属性,则改属性会被自动复制为null。
可以看到xml中无typeName属性,但是在javabean中存在该属性,在反序列化过程中,该属性会被清除为null。
改属性默认值为setTypeName("text");,默认值为"text"。为了保存改默认值,必须在初始化的时候设置:
com.thoughtworks.xstream.XStream.XStream(ReflectionProvider reflectionProvider)
必须继承实现PureJavaReflectionProvider 类。
public class AnnotationJavaReflectionProvider extends PureJavaReflectionProvider
重载后在xstream初始化的时候,传入参数,则实现了保存javabean的默认值。
XStream stream = new XStream(new AnnotationJavaReflectionProvider());
<text name="fkzhzh" title="付款账户账号" validateRule="required,acctno" />
public abstract class SBase { @XStreamAsAttribute String id = ""; @XStreamAsAttribute String name = ""; @XStreamAsAttribute String title = ""; @XStreamAsAttribute String enabled = "true"; @XStreamAsAttribute String value = ""; @XStreamAsAttribute String newLine = "false"; @XStreamOmitField String typeName = "";
@XStreamAlias("text") public class SText extends SBase { @XStreamAsAttribute private String validateRule ; public SText() { setTypeName("text"); } public String getValidateRule() { return validateRule; } public void setValidateRule(String validateRule) { this.validateRule = validateRule; } public String getTypeName() { return typeName; } public void setTypeName(String typeName) { this.typeName = typeName; } }
可以看到xml中无typeName属性,但是在javabean中存在该属性,在反序列化过程中,该属性会被清除为null。
改属性默认值为setTypeName("text");,默认值为"text"。为了保存改默认值,必须在初始化的时候设置:
com.thoughtworks.xstream.XStream.XStream(ReflectionProvider reflectionProvider)
必须继承实现PureJavaReflectionProvider 类。
public class AnnotationJavaReflectionProvider extends PureJavaReflectionProvider
public class AnnotationJavaReflectionProvider extends PureJavaReflectionProvider { /** * 写字段时验证字段可以被访问,且对于String类型需要进行trim */ @Override public void writeField(Object object, String fieldName, Object value, Class definedIn) { Field field = fieldDictionary.field(object.getClass(), fieldName, definedIn); validateFieldAccess(field); try { if (value instanceof String) field.set(object, ((String)value).trim()); else field.set(object, value); } catch (IllegalArgumentException e) { throw new ObjectAccessException("Could not set field " + object.getClass() + "." + field.getName(), e); } catch (IllegalAccessException e) { throw new ObjectAccessException("Could not set field " + object.getClass() + "." + field.getName(), e); } } }
重载后在xstream初始化的时候,传入参数,则实现了保存javabean的默认值。
XStream stream = new XStream(new AnnotationJavaReflectionProvider());
相关文章推荐
- java通过封装编写Book类。要求:类具有属性书名、书号、主编、出版社、出版时间、页数、价格,其中页数不能少于200页,否则输出错误信息,并强制赋默认值200;为各属性设置赋值和取值方法;具有方法d
- Spring的Bean作用域(配置javabean时设置scope属性为以下相应值)
- Java中Bean对象根据属性名称获取和设置其值和Map的性能
- 关于JAVA中变量的初始化及类属性的默认值问题
- JavaBean内省的简单操作,剖析JavaBean属性设置的原理。。
- Java中用反射的方式获取类中的所有属性和方法,以及获取属性的默认值,设置属性的默认值
- java.library.path属性在代码中设置不生效问题
- java xstream中的xml转对象时解析有属性和值的问题
- 关于JAVA中变量的初始化及类属性的默认值问题
- java.library.path属性在代码中设置不生效问题(转)
- 关于javaBean属性乱码问题
- 关于JavaBean属性设置
- JavaBean内省的简单操作,剖析JavaBean属性设置的原理。。
- JavaBean内省的简单操作,剖析JavaBean属性设置的原理。。
- java设置文件或目录隐藏属性的问题
- 如何解决java.library.path属性在代码中设置不生效问题
- Java设置以及获取JavaBean私有属性进阶
- Java中用反射的方式获取类中的所有属性和方法,以及获取属性的默认值,设置属性的默认值
- 关于java中属性默认值问题
- 关于JAVA中变量的初始化及类属性的默认值问题