JAX-RS 的双向字段值转换

Bidirectional field value conversion for JAX-RS

Class 富:

@Entity
@Table(name = "FOO")
@XmlRootElement(name = "doo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Fooimplements Serializable {

    @Column(name = "SOME_FIELD")
    private String someField;

如果 someField 是 "abc",编组后的 XML 看起来像

<foo>
  <someField>abc</someField>

有没有办法注释前后转换,以便仅出于 XML 编组目的,Java 值 "abc" 被转换为 "xyz.abc" (通过将 "xyz." 连接到字符串的开头)并且当 XML 被解组时,值 "xyz.abc" 通过删除前 4 个字符转换为 "abc"?如果重要的话,我正在使用 CXF

可以用 XmlAdapter:

public class CustomAdapter extends XmlAdapter<String, String>{

    @Override
    public String marshal(String v) throws Exception {
        return "xyz." + v;
    }

    @Override
    public String unmarshal(String v) throws Exception {
        return v.replaceFirst("^xyz.", "");
    }
}

并按如下方式使用它:

@XmlAccessorType(XmlAccessType.FIELD)
public class Foo implements Serializable {

    @XmlJavaTypeAdapter(CustomAdapter.class)
    private String someField;

    ...

 }

或者,您可以为此目的使用 getter 和 setter。