java rest客户端_Java中的简单REST客户端

java rest客户端

如今,大多数用于与某些服务器通信的移动应用程序都使用REST服务。 这些服务也是JavaScript或jQuery的常用惯例。 现在,我知道在Java中为REST服务创建客户端的2种方法,在本文中,我将尝试演示这两种方法,希望它们能以某种方式对某人有所帮助。

1.使用Apache HttpClient

Apache HttpClient库简化了HTTP请求的处理。 要使用此库,您必须从其网站下载具有相关性的二进制文件。
这是HTTP GET方法的代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
public class Test {
 public static void main(String[] args) throws ClientProtocolException, IOException {
  HttpClient client = new DefaultHttpClient();
  HttpGet request = new HttpGet('http://restUrl');
  HttpResponse response = client.execute(request);
  BufferedReader rd = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));
  String line = '';
  while ((line = rd.readLine()) != null) {
    System.out.println(line);
  }
 }
}

对于Post方法; 用于在帖子中发送简单的字符串:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
public class Test {
 public static void main(String[] args) throws ClientProtocolException, IOException {
  HttpClient client = new DefaultHttpClient();
  HttpPost post = new HttpPost('http://restUrl');
  StringEntity input = new StringEntity('product');
  post.setEntity(input);
  HttpResponse response = client.execute(post);
  BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
  String line = '';
  while ((line = rd.readLine()) != null) {
   System.out.println(line);
  }
 }
}

您还可以通过以下方式发送POJO的完整JSONXML :将表示JSON或XML的字符串作为StringEntity的参数,然后设置输入内容类型。 像这样:

StringEntity input = new StringEntity('{\'name1\':\'value1\',\'name2\':\'value2\'}'); //here instead of JSON you can also have XML
input.setContentType('application/json');

对于JSON,您可以使用JSONObject创建JSON的字符串表示形式。

JSONObject json = new JSONObject();
json.put('name1', 'value1');
json.put('name2', 'value2');
StringEntity se = new StringEntity( json.toString());

并在后请求中发送多个参数:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
public class Test {
 public static void main(String[] args) throws ClientProtocolException, IOException {
  HttpClient client = new DefaultHttpClient();
  HttpPost post = new HttpPost('http://restUrl');
  List nameValuePairs = new ArrayList(1);
  nameValuePairs.add(new BasicNameValuePair('name', 'value')); //you can as many name value pair as you want in the list.
  post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
  HttpResponse response = client.execute(post);
  BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
  String line = '';
  while ((line = rd.readLine()) != null) {
   System.out.println(line);
  }
 }
}

2.使用球衣

JerseyJSR-311规范(Java中REST支持的规范)的参考实现。 Jersey基本上包含一个REST服务器和一个REST客户端。 它提供了一个库来与产生REST服务的服务器进行通信。 对于http get方法:

import java.io.IOException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import org.apache.http.client.ClientProtocolException;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
public class Test {
 public static void main(String[] args) throws ClientProtocolException, IOException {
  ClientConfig config = new DefaultClientConfig();
  Client client = Client.create(config);
  WebResource service = client.resource(UriBuilder.fromUri('http://restUrl').build());
  // getting XML data
  System.out.println(service. path('restPath').path('resourcePath').accept(MediaType.APPLICATION_JSON).get(String.class));
  // getting JSON data
  System.out.println(service. path('restPath').path('resourcePath').accept(MediaType.APPLICATION_XML).get(String.class));
 }
}

您还可以通过其他媒体格式获得响应,例如PLAIN或HTML。
对于HTTP POST方法:

import java.io.IOException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriBuilder;
import org.apache.http.client.ClientProtocolException;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.core.util.MultivaluedMapImpl;
public class Test {
 public static void main(String[] args) throws ClientProtocolException, IOException {
  ClientConfig config = new DefaultClientConfig();
  Client client = Client.create(config);
  WebResource webResource = client.resource(UriBuilder.fromUri('http://restUrl').build());
  MultivaluedMap formData = new MultivaluedMapImpl();
  formData.add('name1', 'val1');
  formData.add('name2', 'val2');
  ClientResponse response = webResource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse.class, formData);
  System.out.println('Response ' + response.getEntity(String.class));
 }
}

如果您在POST中使用POJO,则可以执行以下操作:

ClientResponse response = webResource.path('restPath').path('resourcePath').
type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, myPojo);
System.out.println('Response ' + response.getEntity(String.class));

此处,myPojo是自定义POJO类的实例。
您还可以使用Jersey的Form类在POST请求中提交多个参数:

import java.io.IOException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import org.apache.http.client.ClientProtocolException;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.representation.Form;
public class Test {
 public static void main(String[] args) throws ClientProtocolException, IOException {
  ClientConfig config = new DefaultClientConfig();
  Client client = Client.create(config);
  WebResource service = client.resource(UriBuilder.fromUri('http://restUrl').build());
  Form form = new Form();
  form.add('name1', 'value1');
  form.add('name2', 'value1');
  ClientResponse response = service.path('restPath').path('resourcePath').
  type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class, form);
  System.out.println('Response ' + response.getEntity(String.class));
 }
}

祝您编程愉快,别忘了分享!

参考:来自harryjoy博客的JCG合作伙伴 Harsh Raval的Java中的简单REST客户端


翻译自: https://www.javacodegeeks.com/2012/09/simple-rest-client-in-java.html

java rest客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值