我需要创建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客户端上帮助我。
答案 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);