在之前的项目中,如果有需要调用webservice的功能,一般我们都是采用httpClient这种方式来实现。如下
String info = URLEncoder.encode("你好","utf-8");
String url = "http://www.tuling123.com/openapi/api?key=appkey&info="+info;
HttpGet get = new HttpGet(url);
HttpResponse response = HttpClients.createDefault().execute(get);
if(response.getStatusLine().getStatusCode() == 200){
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity));
}
这里测试我们调用的是图灵机器人的api,url中的参数为app key。
需要的jar:
httpclient.jar,httpcore.jar,commons-logging.jar
现在介绍另外一种调用webservice的方法:
使用jersey实现,官方网站:https://jersey.java.net
这里我使用的是maven的项目来测试的
在pom.xml文件中添加
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.22.1</version>
</dependency>
测试代码:
package demo;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class JerseyDemo {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
Response response = client.target("http://www.tuling123.com/openapi/api")//
.queryParam("key", "appkey")//
.queryParam("info", "你好!")//
.request(MediaType.APPLICATION_JSON).get();
System.out.println(response.readEntity(String.class));
}
}
测试结果:
{"code":100000,"text":"你也好 嘻嘻"}
再新建一个普通的javabean
package demo;
public class Result {
private String code;
private String text;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
此时修改代码,测试
package demo;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class JerseyDemo {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
Response response = client//
.target("http://www.tuling123.com/openapi/api")//
.queryParam("key", "4b5d718e388b4319758d010e4f3df3bc")//
.queryParam("info", "你好!")//
.request(MediaType.APPLICATION_JSON).get();
System.out.println(response.readEntity(Result.class).getText());
}
}
注意
response.readEntity(Result.class)
,这里直接将返回的json字符串转换为了一个Result对象,然后调用getText()方法获取返回的信息,非常简单。
pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jersey.demo</groupId>
<artifactId>demo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.22.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.22.1</version>
</dependency>
</dependencies>
<build>
<finalName>demo</finalName>
</build>
</project>