JAX-RS的双向字段值转换

时间:2017-03-21 21:17:19

标签: java jax-rs cxf

Class Foo:

@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值&#34; abc&#34;转换为&#34; xyz.abc&#34; (通过将&#34; xyz。&#34;连接到字符串的开头)并且当XML被解组时,值&#34; xyz.abc&#34;被转换为&#34; abc&#34;删除前4个字符?如果重要,我正在使用CXF

1 个答案:

答案 0 :(得分:1)

可以使用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。