如何使用Jersey获取完整的REST请求体?

如何使用Jersey获取POST请求的完整HTTP REST请求正文?

在我们的例子中,数据将是XML。 大小从1K到1MB不等。

该文档似乎表明您应该使用MessageBodyReader但我看不到任何示例。


事实证明,你不需要做太多的事情。

见下面 - 参数x将包含完整的HTTP主体(在我们的例子中是XML)。

@POST
public Response go(String x) throws IOException {
    ...
}

您可以使用@Consumes注释来获得完整的主体:

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;

@Path("doc")
public class BodyResource
{
  @POST
  @Consumes(MediaType.APPLICATION_XML)
  public void post(Document doc) throws TransformerConfigurationException, TransformerException
  {
    Transformer tf = TransformerFactory.newInstance().newTransformer();
    tf.transform(new DOMSource(doc), new StreamResult(System.out));
  }
}

注意 :请不要忘记请求的“Content-Type:application / xml”头。


试试这个使用这个单一的代码:

import javax.ws.rs.POST;
import javax.ws.rs.Path;

@Path("/serviceX")
public class MyClassRESTService {

    @POST
    @Path("/doSomething")   
    public void someMethod(String x) {

        System.out.println(x);
                // String x contains the body, you can process
                // it, parse it using JAXB and so on ...

    }
}

尝试休息服务的URL结束.... / serviceX / doSomething

链接地址: http://www.djcxy.com/p/12359.html

上一篇: How to get full REST request body using Jersey?

下一篇: Alternative bodies for HTTP PUT