有一个我想要转换为Java bean的XML文档。我想将我的bean中缺少的字段标记为hashMap,因为这些字段名称保持不变。有没有办法做到这一点?
例如,我的XML看起来像
<employee>
<firstname>stack</firstname>
<lastname>alpha</lastname>
<phone1>999-999-9999</phone1>
</employee>
我的java bean看起来像
@XstreamAlias("employee")
public class Employee {
private String firstname;
private String lastname;
private map<String, String> unknownfields;
}
当我将XML加载到我的java bean时,它应该看起来像
firstname="stack", lastname="alpha", unknownfields=[{"phone1","999-999-9999"}]
知道这是一个糟糕的设计,但想检查是否可以使用xstream实现。
答案 0 :(得分:0)
实施您自己的转换器。请查看JavaBeanConverter以获取参考实现,因为您希望尽可能接近。
唯一需要处理不同内容的地方是(在 unmarshal 方法中)
if (propertyExistsInClass) {
Class<?> type = determineType(reader, result, propertyName);
Object value = context.convertAnother(result, type);
beanProvider.writeProperty(result, propertyName, value);
seenProperties.add(new FastField(resultType, propertyName));
} else {
throw new MissingFieldException(resultType.getName(), propertyName);
}
在 else 块中,它会抛出MissingFieldException
,您应该填充Map
。 XML元素名称在此处很容易获得,但您需要调整值。获取值的线索位于上面的 if 块中:
Object value = context.convertAnother(result, type);
唯一的问题是你没有Java类型来将值转换为。字符串可能吗?
我会继承JavaBeanConverter
并覆盖unmarshal
方法,但会满足您的需求。