Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RESTWeb服务使用Restlet接受帖子-最佳实践_Java_Web Services_Rest_Post_Restlet - Fatal编程技术网

Java RESTWeb服务使用Restlet接受帖子-最佳实践

Java RESTWeb服务使用Restlet接受帖子-最佳实践,java,web-services,rest,post,restlet,Java,Web Services,Rest,Post,Restlet,我有我的资源,它们是处理POST请求的典型重写方法 public void acceptRepresentation(Representation rep) { if (MediaType.APPLICATION_XML.equals(rep.getMediaType())) { //Do stuff here } else { //complain! } } 我想知道的是处理XML数据包的最佳实践。我看到很多使用表单的示例,但肯定有一种方法可以处理表

我有我的资源,它们是处理POST请求的典型重写方法

public void acceptRepresentation(Representation rep) {

  if (MediaType.APPLICATION_XML.equals(rep.getMediaType())) {
      //Do stuff here
  }
  else {
      //complain!
  }
}
我想知道的是处理XML数据包的最佳实践。我看到很多使用表单的示例,但肯定有一种方法可以处理表示对象本身,或者将其转换为一些有用的XML对象


非常感谢您在如何解析资源中传入的XML方面提供的任何帮助

通过
representation.getText()
方法,您可以获得一个字符串,该字符串可以馈送到SAX解析器或dom读取器中。

我们目前使用RESTeasy来实现这一点,RESTeasy是JAX-RS的替代实现。我们使用JAXB绑定(注释)在XML和我们的模型POJO之间映射,并为JAX-RS指定一个JAXB提供者,以便它知道如何进行映射。这在我们的中有描述,这可能会有所帮助


更新:对于Restlet,这可能是您所需要的。

这是我想要的更多类型的响应。感谢您的回答:

您可以使用两种“XML” 表示法:表示法 和萨克斯管。你可以 用 张贴代表。例如。: DomRepresentation xmlRep=new 代表(rep)

DomRepresentation允许您访问 到Dom文档。这个 SAXSrepresentation允许您解析 使用您自己的XML文档 contentHandler。请看这里的javadocs 1这里是2

  • @西蒙E

    我不明白:您使用的是哪种Java REST实现

    所以,我只给您一个使用JAX-RS(Jersey实现)的示例

    服务器部分(某些REST类的方法):

    客户端部分(一些JUnit测试方法):

    就这样

    如果您在导入方面遇到问题:
    服务器需要javax.ws.rs.*和javax.ws.rs.core.*
    客户需要com.sun.jersey.api.Client.*和 com.sun.jersey.api.representation*

    无论如何,我建议您使用JAX-RS而不是 替代实现,因为JAX-RS将是
    即将推出的JavaEE6

    即使在Restlet2.0中也是这样吗

    我使用restlet 2.0m6,下面是我使用的代码片段-

    @职位

    公众代表流程(代表实体)

    {

    试一试

    {

    DomRepresentation dom=新的DomRepresentation(实体)

    Document d=dom.getDocument()

    }捕获(例外e)

    {e.printStackTrace();}

    它在dom.getDocument()行抛出一个空指针异常,这意味着没有实际到达的数据

    我的flex位看起来像-var服务:HTTPService=new-HTTPService();service.method=“POST”;service.contentType=“application/xml”service.url=url;var-token:AsyncToken=service.send(params)


    其中params是一个XML对象。

    是的,因为Restlet也是一个JAX-RS实现。很抱歉,我不清楚。您能举个例子说明如何使用post和参数调用rest web服务吗?谢谢,roy
    @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();
    }
    
    @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);
    }