REST:转换用POST传递给Java对象的XML内容,属性的元素内(REST: convert X

2019-10-21 12:47发布

我与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”注释,这将参阅的根元素(“范围”)的属性,而不是一个特定的元素的属性(“下部”或“更高”)。

Answer 1:

第一 ,最简单的方法是创建每每个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