`
qq123zhz
  • 浏览: 534250 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

    博客分类:
  • java
 
阅读更多

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

 

分享到:
评论

相关推荐

    xml解析及使用XStream实现javaBean与xml之间的转换

    - 配置XStream:可设置命名空间、类型别名、日期格式等,如`xstream.alias("user", User.class);` - 将JavaBean转换为XML:`String xml = xstream.toXML(user);` - 将XML反序列化为JavaBean:`User user = (User)...

    xstream 让javabean和xml互相转换

    这篇博客“xstream 让javabean和xml互相转换”深入探讨了如何利用XStream库实现这一功能。 XStream的核心思想是通过反射机制,将Java对象的字段映射到XML的元素和属性,以及反向操作将XML解析回Java对象。它的优势...

    XStream在JavaBean与XML/JSON 之间相互转换

    **XStream:JavaBean与XML/JSON之间的转换大师** XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个...

    使用xstream实现对JavaBean与xml字符串的互转

    这篇博客将探讨如何使用XStream库实现JavaBean到XML字符串以及XML字符串回转到JavaBean的过程。 首先,让我们了解XStream的基本概念。XStream由Johannes Brodskiy创建,它是一个基于Java的库,提供了简单且高性能的...

    XStream组件进行Object与XML互转用法

    XStream 是一个强大的 Java 库,它允许程序员方便地将 Java 对象序列化为 XML,以及将 XML 反序列化回 Java 对象。这个组件在处理数据交换、持久化或跨进程通信时非常有用。在Java开发中,XStream 提供了一种简洁的...

    xstream-1.3.1.jar javabean与xml之间的转化

    2. **初始化 XStream 实例:**创建 `XStream` 对象,通常需要对其进行配置,比如设置命名策略、日期格式等。 3. **注册转换器:**如果需要自定义字段映射或处理特殊类型,可以注册转换器。 4. **序列化:**使用 `to...

    xstream-1.3.1.zip

    《XStream:JavaBean与XML之间的桥梁》 在软件开发中,数据的序列化和反序列化是一项重要的任务,尤其是在需要将对象持久化或者在网络间传输时。XStream是一款强大的Java库,它允许开发者轻松地将Java对象转换为XML...

    xml与JavaBean互相转换的好工具---Xstream

    xml与JavaBean互相转换的好工具---Xstream,能够很方便的实现xml与JavaBean之间的转换,这在系统之间进行信息交互是非常方便的

    最齐全的xstream1.4.8.jar

    最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar ...

    javaBean生成xml

    下面我们将详细介绍JavaBean生成XML的过程以及XStream库的使用方法。 首先,理解JavaBean的概念。JavaBean是一种遵循特定规则的Java类,通常包含公共属性和getter/setter方法,用于封装数据。它们是Java应用程序中...

    xstream-1.4.15.jar

    XStream 反序列化漏洞(CVE-2020-26258 & 26259),修复jar包 xstream-1.4.15.jar Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发...

    xStream完整Jar包

    XStream 提供了高度定制化的选项,如命名策略、类型转换器和域属性映射,以满足不同需求。 **XStream 的工作原理** XStream 使用反射来获取 Java 类的信息,并使用这些信息构建 XML 结构。默认情况下,它会将所有...

    xstream-1.4.2.jar

    《XStream详解与应用》 XStream是一款强大的Java库,用于将对象序列化为XML,同时也能从XML数据中反序列化回对象。在标题"xstream-1.4.2.jar"中,我们看到的是XStream的一个特定版本——1.4.2。这个版本包含了...

    xstream最新版 - xstream-1.4.18.jar

    xstream最新版jar包

    xstream学习文档及实例

    然而,为了更安全,应该始终使用 `XStream.setupDefaultSecurity()` 来配置默认的安全设置,并根据需要禁用不安全的转换器。 ```java XStream xstream = new XStream(); xstream.setupDefaultSecurity(); xstream....

    XStream使用文档 wd.docx

    6. **详尽的错误日志**:当序列化或反序列化出现问题时,XStream 提供了详细的错误信息。 7. **多格式支持**:除了XML,XStream 还可以将 Java 对象转换为 JSON 格式。 **XStream 的优势** 与传统的序列化框架相比...

    com.thoughtworks.xstream.XStream操作XML和java对象的一些用法

    例如,如果你有一个简单的User类,包含name和age属性,你可以这样转换: ```java User user = new User("Alice", 25); XStream xstream = new XStream(); String xml = xstream.toXML(user); ``` 这将会生成...

    xstream序列化与反序列化

    xstream中xml与javaBean的互转

    XStream的Date转换 @XStreamConverter DateConverter

    在处理日期时,XStream默认的转换策略可能无法满足所有需求,例如默认格式可能不符合项目规范,或者需要处理时区问题。这时,我们可以自定义一个DateConverter,用`@XStreamConverter`注解标记,以替换默认的转换器...

    xStream用法总结

    通过这种方式,XStream 就能够正确处理 `Params` 节点下的多个同名子节点及其属性,实现 JavaBean 与 XML 之间的无缝转换。 在实际应用中,我们可以通过 `@XStreamAlias` 注解来指定 XML 节点的名称,以及 `@...

Global site tag (gtag.js) - Google Analytics