Jersey客户端发布PUT InputStream“400错误请求”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jersey客户端发布PUT InputStream“400错误请求”相关的知识,希望对你有一定的参考价值。

在我的代码中,我试图迭代n时间构建客户端并将输入流发送到远程端点:

for (int i=0; i<=100; i ++) {                       
    Client client = Client.create();

    WebResource webResource = client.resource("https://endpoint/EndOfDayRapport/eof_" + System.currentTimeMillis());

    SPMResponse response5 = webResource
        .type("text/xml").put(SPMResponse.class,myInputStream);         
    System.out.println(response5);
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

输入流包含消息的xml主体。我注意到的是,在第一次迭代...请求成功第二次迭代,响应是400次错误请求...第三次400错误请求....等等...

如果我将输入流更改为字符串...采用真正的xml并使用PUT方法发送它。第一次迭代...请求成功完成第二次迭代...请求成功完成第三次迭代...请求成功...

有什么不同?为什么它适用于字符串而不是输入流? (似乎某种方式输入流在第一次迭代后发生了变化)性能明智是使用输入流还是字符串更好?

答案

请检查您的输入流。在我看来,您有以下问题:在第一个请求时,您的输入流处于有效状态且数据可用在以下请求中,您的流已经处于结束状态。所以没有什么可读的,你发送的球衣处理的空数据是“坏请求”

因此,尝试使用一个输入流,您可以在每次循环迭代时倒回和倒回它。

但也许这种方式无论如何都会打败使用流的全部意义。

以上是关于Jersey客户端发布PUT InputStream“400错误请求”的主要内容,如果未能解决你的问题,请参考以下文章

jersey之get,put,post,delete简单使用

从 Jersey REST 客户端调用时出现 405 错误代码

Jersey REST GET 正在工作,但 PUT 没有。请求的资源不允许指定的 HTTP 方法

Jersey常用注解解释 @DET@PUT@POST @DELETE等

nested exception is com.sun.jersey.api.client.UniformInterfaceException: PUT

使用ClientResponse发布时,Jersey客户端MessageBodyProviderNotFoundException