如何配置JAXB unmarshaller,以便从字符串中修剪前导空格和尾随空格?
例如,让我们考虑使用JAXB注释在Java bean和XML之间进行简单的绑定:
@XmlRootElement(name="bean")
class Bean {
@XmlElement(required=true)
String name;
@XmlElement(required=true)
int number;
}
我希望能够解析下面给出的XML,因此 bean.name 不包括起始和尾随空格 - 是“我的名字”,而不是“ \ n我的名字\ n “。
<bean>
<name>
My name
</name>
<number>1</number>
</bean>
答案 0 :(得分:6)
使用自定义适配器类。我当时认为NormalizedStringAdapter会做这项工作,但这只是为了解组,而且无论如何都不能做你想做的事。
public class MyNormalizedStringAdapter extends XmlAdapter<String, String> {
@Override
public String marshal(String text) {
return text.trim();
}
@Override
public String unmarshal(String v) throws Exception {
return v.trim();
}
}
然后使用适配器装饰字段,如下所示:
@XmlElement(required=true)
@XmlJavaTypeAdapter(MyNormalizedStringAdapter.class)
String name;
答案 1 :(得分:1)
要在解组期间删除开头和结尾的空格,可以使用适配器CollapsedStringAdapter(自Java 1.6开始)。
内置XmlAdapter以处理xs:token及其派生类型。这个 适配器删除开头和结尾的空格,然后截断任何空格 制表符,CR,LF和SP的序列由单个空格字符''组成。
@XmlElement(required=true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
String name;