我必须设计一个Jersey RestAPI,用户将使用application/xml将xml作为调用的一部分发布。例如,我的网站的 RestAPI 网址将被http://<mysite>/company/employee
用户将从他们的 Web 服务调用以及一个 xml 作为application/xml
有人可以让我知道如何从我的泽西岛 RestAPI 代码中读取此 xml。我知道我必须使用@Consumes(MediaType.APPLICATION_XHTML_XML)
.但不确定如何从输入中检索 xml。
您有两个选择:
-
将有效负载"使用"为字符串,并使用 DOM 解析器或通过调用反序列化器(如 Jackson(来解析它。尽管完全有可能,但不太推荐这样做。
@Path("employee") @POST @Consumes(MediaType.APPLICATION_XML) public Response postEmployee(String empXmlString) { // DO SOMETHING WITH THE XML (empString)... System.out.println(empString); return Response.ok().build(); }
-
使用 JAX-RS 实体提供程序。
对于 XML 有效负载,例如:
<?xml version="1.0"?> <employee> <name>Riker</name> <id>2</id> <rank>Vice manager</rank> </employee>
使用类似的东西:
@Path("employee") @POST @Consumes(MediaType.APPLICATION_XML) @Produces(MediaType.TEXT_PLAIN) public Response postEmployee(Employee emp) { String empDetails = String.format("Entity - name: %s, id: %d, rank: %s", emp.name, emp.id, emp.rank); System.out.println(empDetails); return Response.ok().entity(empDetails).build(); } @XmlRootElement public class Employee { @XmlElement public String name; @XmlElement public int id; @XmlElement public String rank; public Employee(String name, int id, String rank) { this.name = name; this.id = id; this.rank = rank; } public Employee() { } }
注意:
- 可以使用自定义实体提供程序。查看 Jersey 文档中的 MessageBodyReader。
- 泽西岛用户指南真的很棒,使用它。
- 阅读指南中的第 9 章 - 关于 Jersey 的序列化支持/插件("功能"(。
- 泽西岛有很好的例子。参考jaxb示例,它对您来说将是一个很好的起点。