如何配置JAXB以便在解组标记值时修剪空格?

tko*_*zka 10 java xml jaxb

如何配置JAXB unmarshaller以便它将从字符串中修剪前导和尾随空格?

例如,让我们考虑使用JAXB注释在Java bean和XML之间进行简单的绑定:

@XmlRootElement(name="bean")
class Bean {

  @XmlElement(required=true)
  String name;

  @XmlElement(required=true)
  int number;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够解析下面给出的XML,因此bean.name不包括起始和尾随空格 - 是" 我的名字 ",而不是" \n我的名字\n ".

<bean>
  <name>
    My name
  </name>
  <number>1</number>
</bean>
Run Code Online (Sandbox Code Playgroud)

bru*_*nde 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用适配器装饰字段,如下所示:

@XmlElement(required=true)
@XmlJavaTypeAdapter(MyNormalizedStringAdapter.class)
String name;
Run Code Online (Sandbox Code Playgroud)

  • 可能是NormalizedStringAdapter完全坏了吗?它说它删除了前导和尾随空格(参见javadoc),但实际上并没有! (3认同)