如何配置 JAXB 以便缺省情况下修剪空格

2022-09-03 09:09:23

我想配置JAXB,以便它修剪所有字符串字段上的空格

我看到了以下答案:如何配置JAXB,以便在取消编组标签值时修剪空格?

但我不想按照建议的答案注释所有字符串字段

@XmlElement(required=true)
@XmlJavaTypeAdapter(MyNormalizedStringAdapter.class)
String name;

谢谢!


答案 1
  1. 创建一个 XmlAdapter

    package com.foo.bar;
    public class StringTrimAdapter extends XmlAdapter<String, String> {
        @Override
        public String unmarshal(String v) throws Exception {
            if (v == null)
                return null;
            return v.trim();
        }
        @Override
        public String marshal(String v) throws Exception {
            if (v == null)
                return null;
            return v.trim();
        }
    }
    
  2. 在 中创建文件。package-info.javacom.foo.bar

  3. 将以下内容添加到文件中package-info.java

    @XmlJavaTypeAdapter(value=StringTrimAdapter.class,type=String.class)
    package com.foo.bar;
    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
    
  4. 这将适用于 中的所有字段,无需任何额外注释。StringTrimAdapterStringcom.foo.bar

编辑
请注意,如果包级别批注对您来说过于宽泛,则始终可以将批注应用于类。@XmlJavaTypeAdapter


答案 2

值得一提的是,除了编写执行修整的 XmlAdapter 之外,还可以将 XJC 配置为在生成的代码中实际使用此适配器。如何做到这一点的示例:

<jaxb:globalBindings>
    <xjc:javaType 
         name="java.lang.String" 
         xmlType="xs:string" 
         adapter="com.foo.bar.StringTrimAdapter"/>
</jaxb:globalBindings>

上面的例子使用了Sahil答案中给出的XmlAdapter