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。
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。