2
我有一個對象「Role」,它可以包含多個「Privileges」,它們也是對象。現在,當我試圖序列角色與西河我的XML看起來是這樣的:XStream刪除集合中不需要的字段
<role>
<roleName>Administrator</roleName>
<privileges class="org.hibernate.collection.PersistentSet">
<set>
<privilege>
<privilegeId>1001</privilegeId>
<privilegeName>Admin Privilege</privilegeName>
<privilegeKey>Admin</privilegeKey>
</privilege>
</set>
<initialized>true</initialized>
<owner class="role" reference="../.."/>
<cachedSize>-1</cachedSize>
<rolemodel.valueobject.Role.privileges</role>
<key class="int">3</key>
<dirty>false</dirty>
<storedSnapshot class="map">
<entry>
<privilege reference="../../../set/privilege"/>
<privilege reference="../../../set/privilege"/>
</entry>
</storedSnapshot>
</privileges>
</role>
我希望它看起來像這樣:
<role>
<roleName>Administrator</roleName>
<privileges>
<privilegeId>1001</privilegeId>
<privilegeName>Admin Privilege</privilegeName>
<privilegeKey>Admin</privilegeKey>
</privileges>
</role>
我怎麼能忽略/刪除/不包括所有這些附加字段?看起來他們是「實用」字段,由hibernate添加,因爲我沒有在我的hbm.xml中聲明它們。 我已經嘗試省略它們,將特權集合添加爲隱式和我在XStream頁面上找到的其他內容。
編輯 我失敗瞭如下建議創建XSLT模板,卻發現自定義轉換器是非常好,簡單的工具來做好這項工作。查看此處的幫助頁面 - http://x-stream.github.io/converter-tutorial.html。 這是我的名帥方法:
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
Role role = (Role) value;
writer.startNode("roleId");
writer.setValue(role.getRoleId().toString());
writer.endNode();
writer.startNode("roleName");
writer.setValue(role.getRoleName());
writer.endNode();
writer.startNode("privileges");
for (Privilege privilege : role.getPrivileges()){
writer.startNode("privilege");
writer.setValue(privilege.getPrivilegeName());
writer.endNode();
}
writer.endNode();
}
和XML它產生:
<role>
<roleId>3</roleId>
<roleName>Web Administrator</roleName>
<privileges>
<privilege>Web Access</privilege>
</privileges>
</role>
感謝您的建議。不幸的是,我沒有得到它的工作 - 我想,xsl有一個陡峭的學習曲線。 –