11

如何配置 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>
4

2 回答 2

8

使用自定义适配器类。我在想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;
于 2008-12-11T13:39:21.030 回答
2

要在解组期间删除前导和尾随空格,您可以使用适配器CollapsedStringAdapter(从 Java 1.6 开始)。

内置 XmlAdapter 来处理 xs:token 及其派生类型。此适配器删除前导和尾随空格,然后用单个空格字符“”截断制表符、CR、LF 和 SP 的任何序列。

@XmlElement(required=true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
String name;
于 2020-02-21T10:38:44.053 回答