如何使用泽西岛获得完整的 REST 请求正文?

2022-08-31 14:42:32

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

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

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


答案 1

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

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

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

答案 2

您可以使用@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));
  }
}

注意:不要忘记请求中的“内容类型:应用程序/xml”标头。