Spring guide 03: Restful服务的消费

Posted MrQin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring guide 03: Restful服务的消费相关的知识,希望对你有一定的参考价值。

这一小节我们建立一个消费WebService的应用。

我们将建立一个通过Spring的RestTemplate从http://gturnquist-quoters.cfapps.io/api/random 获得数据的应用。

http://gturnquist-quoters.cfapps.io/api/random是一个RestfulService接口,它随机引用一些关于SpringBoot的话并以Json形式返回。
Json格式大致如下

{
    type: "success",
    value: {
        id: 10,
        quote: "Really loving Spring Boot, makes stand alone Spring apps easy."
    }
}

 

非常简单,但通常不会通过浏览器来获取这类数据,而是以编程方式消费。
Spring提供的模板类RestTemplate可以轻松地帮你完成这些任务。
RestTemplate不但可以 makes interacting with most RESTful services a one-line incantation,也可以将数据绑定到客户端对应的实体类中。
如下,根据Json创建一个实体类

 1 package cn.tiny77.guide03.po;
 2 
 3 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 4 
 5 @JsonIgnoreProperties(ignoreUnknown = true)
 6 public class Quote {
 7 
 8     private String type;
 9     private Value value;
10 
11     public Quote() {
12     }
13 
14     public String getType() {
15         return type;
16     }
17 
18     public void setType(String type) {
19         this.type = type;
20     }
21 
22     public Value getValue() {
23         return value;
24     }
25 
26     public void setValue(Value value) {
27         this.value = value;
28     }
29 
30     @Override
31     public String toString() {
32         return "Quote{" +
33                 "type=\'" + type + \'\\\'\' +
34                 ", value=" + value +
35                 \'}\';
36     }
37 }

 

 

你可以看到,这是简单的包含一些属性和相应的getter、Setter方法的Java类。
@JsonIgnoreProperties 注释的作用是当一些属性无法绑定时忽略它们。

为了你能直接绑定数据到实体类,你需要指定实体类的属性名和Json中的key一致,如果它俩不一致,你需要为实体类属性添加JsonProperty来指定相应的Json的key。

补充Value类的代码截图

 1 package cn.tiny77.guide03.po;
 2 
 3 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 4 
 5 @JsonIgnoreProperties(ignoreUnknown = true)
 6 public class Value {
 7 
 8     private Long id;
 9     private String quote;
10 
11     public Value() {
12     }
13 
14     public Long getId() {
15         return this.id;
16     }
17 
18     public String getQuote() {
19         return this.quote;
20     }
21 
22     public void setId(Long id) {
23         this.id = id;
24     }
25 
26     public void setQuote(String quote) {
27         this.quote = quote;
28     }
29 
30     @Override
31     public String toString() {
32         return "Value{" +
33                 "id=" + id +
34                 ", quote=\'" + quote + \'\\\'\' +
35                 \'}\';
36     }
37 }

 

 

Main函数如下

 1 package cn.tiny77.guide03;
 2 
 3 
 4 import org.slf4j.Logger;
 5 import org.slf4j.LoggerFactory;
 6 import org.springframework.web.client.RestTemplate;
 7 
 8 import cn.tiny77.guide03.po.Quote;
 9 
10 public class App {
11     private static final Logger log = LoggerFactory.getLogger(App.class);
12     private static final String URL = "http://gturnquist-quoters.cfapps.io/api/random";
13     
14     public static void main( String[] args ) throws Exception
15     {
16         RestTemplate restTemplate = new RestTemplate();
17         Quote quote = restTemplate.getForObject(URL, Quote.class);
18         log.info(quote.toString());
19     }
20 }

 

运行 如下

 

项目下载

以上是关于Spring guide 03: Restful服务的消费的主要内容,如果未能解决你的问题,请参考以下文章

[译]Spring Boot 构建一个RESTful Web服务

Spring RESTful 服务作为 WAR 而不是 Tomcat 中的 JAR

RESTFUL web service spring,XML而不是JSON?

从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统03创建RESTful API,并统一处理返回值

SpingBoot guides系列翻译调用RESTfulWebService

3.消费一个RESTful Web Service