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

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

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值