由于在实际项目中碰到的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接口调用方法总结(超详细)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。