java bean 设置初始值_xstream javabean设置属性默认值的问题

在xstream反序列化使用过程中发现,如果xml无该属性,则改属性会被自动复制为null。

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());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值