您的位置:首页 > 编程语言 > Java开发

xstream javabean设置属性默认值的问题

2014-02-12 00:00 197 查看
在xstream反序列化使用过程中发现,如果xml无该属性,则改属性会被自动复制为null。

<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());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐