由于在实际项目中碰到的restful服务,参数都以json为准。这里我获取的接口和传入的参数都是json字符串类型。发布restful服务可参照文章 Jersey实现Restful服务(实例讲解),以下接口调用基于此服务。
基于发布的Restful服务,下面总结几种常用的调用方法。
(1)Jersey API
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package com.restful.client; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.restful.entity.PersonEntity; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import javax.ws.rs.core.MediaType; /** * Created by XuHui on 2017/8/7. */ public class JerseyClient { private static String REST_API = " http://localhost:8080/jerseyDemo/rest/JerseyService " ; public static void main(String[] args) throws Exception { getRandomResource(); addResource(); getAllResource(); } public static void getRandomResource() { Client client = Client.create(); WebResource webResource = client.resource(REST_API + "/getRandomResource" ); ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).accept( "application/json" ).get(ClientResponse. class ); String str = response.getEntity(String. class ); System.out.print( "getRandomResource result is : " + str + "\n" ); } public static void addResource() throws JsonProcessingException { Client client = Client.create(); WebResource webResource = client.resource(REST_API + "/addResource/person" ); ObjectMapper mapper = new ObjectMapper(); PersonEntity entity = new PersonEntity( "NO2" , "Joker" , " http:// " ); ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).post(ClientResponse. class , mapper.writeValueAsString(entity)); System.out.print( "addResource result is : " + response.getEntity(String. class ) + "\n" ); } public static void getAllResource() { Client client = Client.create(); WebResource webResource = client.resource(REST_API + "/getAllResource" ); ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).accept( "application/json" ).get(ClientResponse. class ); String str = response.getEntity(String. class ); System.out.print( "getAllResource result is : " + str + "\n" ); } } |
结果:
1
|
2
3
|
getRandomResource result is : { "id" : "NO1" , "name" : "Joker" , "addr" : " http:/// " } addResource result is : { "id" : "NO2" , "name" : "Joker" , "addr" : " http:// " } getAllResource result is : [{ "id" : "NO2" , "name" : "Joker" , "addr" : " http:// " }] |
(2)HttpURLConnection
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
package com.restful.client; import com.fasterxml.jackson.databind.ObjectMapper; import com.restful.entity.PersonEntity; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; /** * Created by XuHui on 2017/8/7. */ public class HttpURLClient { private static String REST_API = " http://localhost:8080/jerseyDemo/rest/JerseyService " ; public static void main(String[] args) throws Exception { addResource(); getAllResource(); } public static void addResource() throws Exception { ObjectMapper mapper = new ObjectMapper(); URL url = new URL(REST_API + "/addResource/person" ); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setDoOutput( true ); httpURLConnection.setRequestMethod( "POST" ); httpURLConnection.setRequestProperty( "Accept" , "application/json" ); httpURLConnection.setRequestProperty( "Content-Type" , "application/json" ); PersonEntity entity = new PersonEntity( "NO2" , "Joker" , " http:// " ); OutputStream outputStream = httpURLConnection.getOutputStream(); outputStream.write(mapper.writeValueAsBytes(entity)); outputStream.flush(); BufferedReader reader = new BufferedReader( new InputStreamReader(httpURLConnection.getInputStream())); String output; System.out.print( "addResource result is : " ); while ((output = reader.readLine()) != null ) { System.out.print(output); } System.out.print( "\n" ); } public static void getAllResource() throws Exception { URL url = new URL(REST_API + "/getAllResource" ); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod( "GET" ); httpURLConnection.setRequestProperty( "Accept" , "application/json" ); BufferedReader reader = new BufferedReader( new InputStreamReader(httpURLConnection.getInputStream())); String output; System.out.print( "getAllResource result is :" ); while ((output = reader.readLine()) != null ) { System.out.print(output); } System.out.print( "\n" ); } } |
结果:
1
|
2
|
addResource result is : { "id" : "NO2" , "name" : "Joker" , "addr" : " http:// " } getAllResource result is :[{ "id" : "NO2" , "name" : "Joker" , "addr" : " http:// " }] |
(3)HttpClient
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package com.restful.client; import com.fasterxml.jackson.databind.ObjectMapper; import com.restful.entity.PersonEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; /** * Created by XuHui on 2017/8/7. */ public class RestfulHttpClient { private static String REST_API = " http://localhost:8080/jerseyDemo/rest/JerseyService " ; public static void main(String[] args) throws Exception { addResource(); getAllResource(); } public static void addResource() throws Exception { HttpClient httpClient = new DefaultHttpClient(); PersonEntity entity = new PersonEntity( "NO2" , "Joker" , " http:// " ); ObjectMapper mapper = new ObjectMapper(); HttpPost request = new HttpPost(REST_API + "/addResource/person" ); request.setHeader( "Content-Type" , "application/json" ); request.setHeader( "Accept" , "application/json" ); StringEntity requestJson = new StringEntity(mapper.writeValueAsString(entity), "utf-8" ); requestJson.setContentType( "application/json" ); request.setEntity(requestJson); HttpResponse response = httpClient.execute(request); String json = EntityUtils.toString(response.getEntity()); System.out.print( "addResource result is : " + json + "\n" ); } public static void getAllResource() throws Exception { HttpClient httpClient = new DefaultHttpClient(); HttpGet request = new HttpGet(REST_API + "/getAllResource" ); request.setHeader( "Content-Type" , "application/json" ); request.setHeader( "Accept" , "application/json" ); HttpResponse response = httpClient.execute(request); String json = EntityUtils.toString(response.getEntity()); System.out.print( "getAllResource result is : " + json + "\n" ); } } |
结果:
1
|
2
|
addResource result is : { "id" : "NO2" , "name" : "Joker" , "addr" : " http:// " } getAllResource result is : [{ "id" : "NO2" , "name" : "Joker" , "addr" : " http:// " }] |
maven:
1
|
2
3
4
5
|
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version> 4.1 . 2 </version> </dependency> |
(4)JAX-RS API
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package com.restful.client; import com.restful.entity.PersonEntity; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.io.IOException; /** * Created by XuHui on 2017/7/27. */ public class RestfulClient { private static String REST_API = " http://localhost:8080/jerseyDemo/rest/JerseyService " ; public static void main(String[] args) throws Exception { getRandomResource(); addResource(); getAllResource(); } public static void getRandomResource() throws IOException { Client client = ClientBuilder.newClient(); client.property( "Content-Type" , "xml" ); Response response = client.target(REST_API + "/getRandomResource" ).request().get(); String str = response.readEntity(String. class ); System.out.print( "getRandomResource result is : " + str + "\n" ); } public static void addResource() { Client client = ClientBuilder.newClient(); PersonEntity entity = new PersonEntity( "NO2" , "Joker" , " http:// " ); Response response = client.target(REST_API + "/addResource/person" ).request().buildPost(Entity.entity(entity, MediaType.APPLICATION_JSON)).invoke(); String str = response.readEntity(String. class ); System.out.print( "addResource result is : " + str + "\n" ); } public static void getAllResource() throws IOException { Client client = ClientBuilder.newClient(); client.property( "Content-Type" , "xml" ); Response response = client.target(REST_API + "/getAllResource" ).request().get(); String str = response.readEntity(String. class ); System.out.print( "getAllResource result is : " + str + "\n" ); } } |
结果:
1
|
2
3
|
getRandomResource result is : { "id" : "NO1" , "name" : "Joker" , "addr" : " http:/// " } addResource result is : { "id" : "NO2" , "name" : "Joker" , "addr" : " http:// " } getAllResource result is : [{ "id" : "NO2" , "name" : "Joker" , "addr" : " http:// " }] |
(5)webClient
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package com.restful.client; import com.fasterxml.jackson.databind.ObjectMapper; import com.restful.entity.PersonEntity; import org.apache.cxf.jaxrs.client.WebClient; import javax.ws.rs.core.Response; /** * Created by XuHui on 2017/8/7. */ public class RestfulWebClient { private static String REST_API = " http://localhost:8080/jerseyDemo/rest/JerseyService " ; public static void main(String[] args) throws Exception { addResource(); getAllResource(); } public static void addResource() throws Exception { ObjectMapper mapper = new ObjectMapper(); WebClient client = WebClient.create(REST_API) .header( "Content-Type" , "application/json" ) .header( "Accept" , "application/json" ) .encoding( "UTF-8" ) .acceptEncoding( "UTF-8" ); PersonEntity entity = new PersonEntity( "NO2" , "Joker" , " http:// " ); Response response = client.path( "/addResource/person" ).post(mapper.writeValueAsString(entity), Response. class ); String json = response.readEntity(String. class ); System.out.print( "addResource result is : " + json + "\n" ); } public static void getAllResource() { WebClient client = WebClient.create(REST_API) .header( "Content-Type" , "application/json" ) .header( "Accept" , "application/json" ) .encoding( "UTF-8" ) .acceptEncoding( "UTF-8" ); Response response = client.path( "/getAllResource" ).get(); String json = response.readEntity(String. class ); System.out.print( "getAllResource result is : " + json + "\n" ); } } |
结果:
1
|
2
|
addResource result is : { "id" : "NO2" , "name" : "Joker" , "addr" : " http:// " } getAllResource result is : [{ "id" : "NO2" , "name" : "Joker" , "addr" : " http:// " } |
maven:
1
|
2
3
4
5
|
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-bundle-jaxrs</artifactId> <version> 2.7 . 0 </version> </dependency> |
注:该jar包引入和jersey包引入有冲突,不能在一个工程中同时引用。
以上这篇基于Restful接口调用方法总结(超详细)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。