我正在使用 REST 服务,我想通过 POST 请求传递 XML 文本。我的服务器是用 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 Link Moxy及其@XmlPath 注释:
@XmlRootElement(name = "range")
@XmlAccessorType(XmlAccessType.FIELD)
public class RangeClass {
@XmlPath("lower/@value")
private int lower;
@XmlPath("higher/@value")
private int higher;
}
关于java - REST:将用POST传递的XML内容转换为java对象,元素内部的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719036/