1

我正在使用 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”注释,这将引用根元素的属性(“范围”),而不是特定元素的属性(“较低”或“较高”)。

4

1 回答 1

3

首先也是最简单的方法是为每个 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;

}
于 2014-12-31T09:48:18.887 回答