【前言】REST教程第二篇,这里的“消费”指“解析、渲染”的意思。原文链接 http://spring.io/guides/gs/consuming-rest/
【目标】在这里,你将使用REST模板从Facebook图像API:http://graph.facebook.com/pivotalsoftware检索公司网页数据
【准备工作】和第一篇一样
- 准备好jdk 1.7
- eclipse下的maven建立Spring工程
- 做好修改pom.xml的准备,和第一篇的pom.xml相比,<dependencies>不一样
<span style="font-size:14px;"> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies></span>
获取REST资源
建立好项目之后,就可以创建一个访问REST服务的应用了。
假设你想找出Facebook上有关Pivotal东西,已知Pivotal在Facebook上有自己的页面,其ID为“PivotalSoftware”,你应该可以通过URLhttp://graph.facebook.com/pivotalsoftware访问到Facebook上的图形API。
如果你在web浏览器或者Curl上访问这个URL,你会收到一个Json文档,他看起来好像下面的样子:
(节省篇幅,省略掉这个Json)
够简单,不过对于Web浏览器和Curl来说,实在没什么用。(他的消费就是这个意思,要把json转成有用的东西)
一个更有用的消费REST方式是用程序完成解析。为了完成这项任务,Spring提供了一个很方便的模板类叫做RESTTemplate。
RESTTemplate把与REST服务的交互串成一条线上的蚂蚱(不懂为何用incantation咒语这个词,我改成蚂蚱
)。并且可以把数据绑定到指定的领域的类型上。
首先,创建一个包含所需数据的领域类。假设你就想知道Pivotal的name,phonenumber,website URL,以及pivotalsoftware页面的内容,下面建这样一个领域类:
package hello;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Page {
private String name;
private String about;
private String phone;
private String website;
public String getName() {
return name;
}
public String getAbout() {
return about;
}
public String getPhone() {
return phone;
}
public String getWebsite() {
return website;
}
}
这就是一个很简单的Java类,有一些属性和getter,唯一不同的是有一个注解@JsonIgnoreProperties,表示忽略(REST的Json响应页中)没有绑定到这个类的属性。
让这个应用跑起来
war方式就不说了。现在看Application的方式怎么写。
和第一篇使用SpringApplication.run()启动REST服务不同,这里使用RestTemplate对象的getForObject()方法,依靠jackson Json完成Json对象的直接解析。
package hello;
import org.springframework.web.client.RestTemplate;
public class Application {
public static void main(String args[]) {
RestTemplate restTemplate = new RestTemplate();
Page page = restTemplate.getForObject("http://graph.facebook.com/pivotalsoftware", Page.class);
System.out.println("Name: " + page.getName());
System.out.println("About: " + page.getAbout());
System.out.println("Phone: " + page.getPhone());
System.out.println("Website: " + page.getWebsite());
}
}
和第一篇使用SpringApplication.run()启动REST服务不同,这里使用RestTemplate对象的getForObject()方法,依靠jackson Json完成Json对象的直接解析。
虽然这里用了RestTemplate生成GET请求,实际上他还可以用于处理POST、PUT、DELETE。
输出看起来像这样:
Name: Pivotal About: At Pivotal, our mission is to enable customers to build a new class of applications, leveraging big and fast data, and do all of this with the power of cloud independence. Phone: 650-286-8012 Website: http://www.gopivotal.com【小结】掌握RESTTemplate对象的getForObject()方法,可以看看doc,应该还有其他方法。 注解@JsonIgnoreProperties在bean中的使用。