如何解决字符串字段Java的XStream自定义属性
我正在使用XStream库处理RSS Feed,并且具有以下模型(出于示例目的而简化)
userName: {
//other styles
textAlign: 'center'
}
它工作正常,它生成了我需要的XML部分。但是问题是我需要为guid添加自定义属性(“ isPermaLink”),而我找不到任何解决方案。
所以我需要的XML是:
public class Item {
private String title;
private String link;
private String guid; }
我知道我可以通过使用
<item>
<title>Test</title>
<link>www.example.com/abc</link>
<guid isPermaLink="false">www.example.com/abc</guid>
</item>
所以我试图为GUID添加另一个类
@XStreamAsAttribute
并指向我的Item类中的内容,然后生成的代码包含如下的GUID部分:
public class Guid {
private String value = "http://example.com/abc";
@XStreamAsAttribute
private boolean isPermaLink = true;
}
而且我不能在其中包含此元素。该值必须为内联。
问题是-如何使值内联或如何向字符串字段添加属性
解决方法
很抱歉自我回答,但是花了一些时间在这个话题上之后,我终于找到了答案。可能可以帮助某人,所以我将其发布在这里。
基本上,我认为没有默认的方式可以做到这一点。我浏览了有关XStream的所有教程,还研究了XStream可用的每个注解。
最后,我确实设法做出了可行的解决方法。基本上,为了向String添加属性(例如),您可以使用自定义Converter并在其中添加属性。 因此,在我的Guid字段上,我正在使用 XStreamConverter 选择我的转换器:
@XStreamConverter(value = GuidConverter.class)
private String guid;
转换器本身:
public class GuidConverter implements Converter{
@Override
public boolean canConvert(Class type) {
return String.class.isAssignableFrom(type);
}
@Override
public void marshal(Object source,HierarchicalStreamWriter writer,MarshallingContext context) {
String value = (String) source;
writer.addAttribute("isPermaLink","false");
writer.setValue(value);
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
//TODO if you need - I don't because I'm only marshalling in my scenario
return null;
}
}
这很遗憾,没有针对此的“即用型”解决方案,因为如果您有更多想要属性的String或想要使这些属性值动态化,那么...解决方案将不适用于您。 就我而言,它之所以奏效是因为我始终需要相同的值(isPermaLink =“ false”),但在大多数情况下,这还不够。
也许有人有更好的主意
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。