java - REST:将用POST传递的XML内容转换为java对象,元素内部的属性

标签 java rest jersey xmlmapper

我正在使用 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/

相关文章:

java - Java 的 strictfp 修饰符是否通过函数调用应用?

java - 在循环中使用 Jsoup connect()。第一个请求总是比所有其他后续请求慢得多

java - 通过 JSON 中的 RestTemplate 发布请求

java - 从 JSON 响应中删除键

java - 状态 404 Jersey rest 服务与 tomcat 8

java - 找不到媒体类型 MessageBodyReader=application/octet-stream

java - 可以将处理语言中的程序轻松移植到Java吗?

java - Xtext解析规则不完整

java - Swagger 2 相对于 Swagger 增加了哪些内容?

json - 使用HTTPBuilder和Grails进行REST调用后出现奇怪的 “new”属性