Jersey REST客户端返回HTTP错误代码:500

时间:2014-07-14 09:10:55

标签: rest jersey-client

我需要创建Jersey REST客户端。这是我的代码:

    ClientConfig clientConfig = new DefaultClientConfig();
    Client client = Client.create(clientConfig);
    client.addFilter(new HTTPBasicAuthFilter(user_id, api_key));
    WebResource webResource = client.resource(uri);

    String inputString = "{ \"subject\" : \"Test\", \"message\" : \"Hello\", \"recipients\" : \"abc@gmail.com\" }";

    ClientResponse response =  webResource.accept(MediaType.APPLICATION_JSON)
            .type(MediaType.APPLICATION_JSON)
            .post(ClientResponse.class, inputString);

    // check response status code
    if (response.getStatus() != 200) {
        throw new RuntimeException("Failed : HTTP error code : "
                + response.getStatus());
    }

上面的代码给出了以下错误:

Exception in thread "main" java.lang.RuntimeException: Failed : HTTP error code : 500

REST服务不是由我开发的。这是第三方服务。 REST服务说:

API可以通过HTTPS使用Basic HTTP Auth(请求的Authentication头,对于类似REST的API非常标准)进行访问。 API需要HTTP POST。

这是正常工作的CURL:

curl -u user_id:api_key -d" subject = API%20Test& message = Hello& recipients = abc@gmail.com" apiEndpointUri

请在Jersey REST客户端上帮助我。

1 个答案:

答案 0 :(得分:1)

我认为您的服务不接受使用JSON类型的POST。

您可以尝试使用Form URLEncoded type

MultivaluedMap<String, String> postBody = new MultivaluedMapImpl();
postBody.add("subject", "Test");
postBody.add("message", "Hello");
postBody.add("recipients", "abc@gmail.com");

ClientResponse response =  webResource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
                .post(ClientResponse.class, postBody);