REST Web 服务使用 Restlet 接受 POST - 最佳实践
-
22-07-2019 - |
题
我有我的资源和他们典型的重写方法来处理 POST 请求。
public void acceptRepresentation(Representation rep) {
if (MediaType.APPLICATION_XML.equals(rep.getMediaType())) {
//Do stuff here
}
else {
//complain!
}
}
我想知道的是处理 XML 数据包的最佳实践。我看到很多使用 Form 的示例 - 但肯定有一种方法可以使用 Representation 对象本身或将其转换为一些有用的 XML 对象???
非常感谢您对如何解析资源中传入的 XML 的任何帮助。
解决方案
这更像是我一直在寻找的回应。谢谢 蒂埃里·布瓦洛 对于答案:
您可以使用两种“ XML表示”:多么代表和萨克斯代表。您可以通过已发布的表示形式实例化两者。例如。:dompresentation xmlRep =新的dommercentation(rep);
Dompresentation可让您访问DOM文档。SaxTrementation允许您使用自己的ContentHandler解析XML文档。请参阅此处的Javadocs 1和2。
其他提示
我们目前做到这一点使用RestEasy的,这是一种替代JAX-RS实现。我们使用JAXB绑定(注释)的XML和我们的模型的POJO之间进行映射,因此它知道如何指定的 JAXB提供商的到JAX-RS。这是在我们的的RESTful在Java EE的网络服务与的RESTEasy(JAX-RS)文章,这可能会有帮助。
更新:为的Restlet,所述 JAXB扩展可能是你所需要的。
representation.getText()
方法,则可以得到可以被送入一个SAX解析器或DOM读取器的字符串。
@Simonë
我不明白:这REST实现对Java您使用
?所以,我只是给你用JAX-RS的一个例子(实施泽西)
<强>服务器部分强>(一些REST类的方法):
@POST
@Path("/upload")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public static Response upload(
@FormParam("name") String name,
@FormParam("content") String content)
throws Exception {
// NOTE: you get your content as String
// (do something here)
return Response.ok().build();
}
<强>客户端部分强>(一些JUnit测试的方法):
@Test
public void uploadFile()
throws Exception {
String address = "http://0.0.0.0:8000/r/upload";
WebResource r = Client.create().resource(address);
Form form = new Form();
form.add("name", "test");
form.add("content", "SOME CONTENT GOES HERE");
String s = r.post(String.class, form);
System.out.println(s);
}
这就是它!
如果你有麻烦进口:点击 服务器需要javax.ws.rs。*和javax.ws.rs.core。*点击 客户的需求com.sun.jersey.api.client。*和 com.sun.jersey.api.representation。*
在任何方式,我会给你使用JAX-RS,而不是建议 替代实施方式,因为JAX-RS将是部分 即将到来的的Java EE 6 强>
这是相同的步骤,即使在的Restlet 2.0 ...
我使用的Restlet 2.0m6和这里的是,我使用的代码片段 -
@Post
公共表示处理(表示实体)
{
试
{
DomRepresentation DOM =新DomRepresentation(实体);
文献d = dom.getDocument();
}赶上(例外五)
{e.printStackTrace(); }
和它抛出在dom.getDocument()行一个空指针异常。这意味着没有数据实际到达。
和我的Flex位看起来像这样 - VAR服务:的HTTPService =新的HTTPService(); service.method = “POST”; service.contentType = “应用/ xml” 的service.url = URL; VAR令牌:的AsyncToken = service.send(PARAMS);
其中params为一个XML对象。