我与REST服务工作,我想传递一个XML文本与POST请求。 我的服务器是用Java实现。 比方说,我发送此XML:
<range>
<higher value="3"></higher>
<lower value="2"></lower>
</range>
按照我的理解(纠正我,如果我错了),将XML转换在请求中的Java对象最简单的方法,是定义与正确标注类。 例如:
@XmlRootElement(name = "range")
public class RangeClass {
@XmlElement (name = "lower")
private int lower;
@XmlElement (name = "higher")
private int higher;
.
.
???
}
然后看它是这样的:
@POST
@PATH(<somePath>)
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
public String myFun(RangeClass range) {
.
.
.
}
我很想念(如果其他部分是正确的)问题是如何定义我具备的要素中的属性。 如果我把一个“@XmlAttribute”注释,这将参阅的根元素(“范围”)的属性,而不是一个特定的元素的属性(“下部”或“更高”)。
第一 ,最简单的方法是创建每每个XML标签的Java映射:
@XmlRootElement(name = "range")
public class RangeClass {
private Higher higher;
private Lower lower;
}
@XmlElement(name = "higher")
public class Higher {
@XmlAttribute
private int value;
}
@XmlElement(name = "lower")
public class Lower {
@XmlAttribute
private int value;
}
第二个选择是改变XML结构:
<range>
<higher>3</higher>
<lower>2</lower>
</range>
然后你可以使用@XmlElement注释:
@XmlRootElement(name = "range")
@XmlAccessorType(XmlAccessType.FIELD)
public class RangeClass {
@XmlElement
private int lower;
@XmlElement
private int higher;
}
第三种选择是使用Eclipse的链接莫西及其@XmlPath注释:
@XmlRootElement(name = "range")
@XmlAccessorType(XmlAccessType.FIELD)
public class RangeClass {
@XmlPath("lower/@value")
private int lower;
@XmlPath("higher/@value")
private int higher;
}
文章来源: REST: convert XML content passed with POST to a java object, attribute inside the element