- 项目说明
- 项目前提条件
- 项目初始化
- 利用spring initializr网站
- 利用gitte网站直接克隆下载本文的练习仓库
- 项目启动
- 项目搭建
- Domain 文件
- Domain实现
- 细节讲解
- 实现消费端
- 具体代码
- 细节讲解
- 项目效果
- 结束语
学习Spring最好的方法是什么:看官方文档,因为官方文档的信息最全,不会出现某些包过时的情况,但是官方文档很难看懂,即使看懂也不知道怎么去练习怎么办,不用怕,Spring官方都帮你想好了,
Spring Guides:https://spring.io/guides 可以说是Spring官方对新手最友好的项目教程,一个项目花费的时间只需要仅仅十几二十分钟,架子搭好了,只需要关注最重要的部分即可。
但是官方文档都是英语怎么办,不用怕,本系列文章会帮你一一捋清楚,而且会更进一步解释部分官方文档里面没有详细说明的内容。下面来一起开始吧,帮您快速进入Spring的世界!
做过网站的都知道,一个web项目有服务提供方,肯定有服务消费方,一般而言,浏览器就是一个服务消费方,比如上一个项目创建一个Restful web 服务 的消费方就是浏览器,浏览器请求 http://localhost:8080/greeting?name=EDG会访问到我们的服务提供方,即后台。但假如俩个后台服务之间需要怎么办,或者某一个服务需要调用外部请求API怎么办,不要怕,本文将带您了解如何快速搭建一个消费API的服务。
本项目旨在为练习人员快速熟悉并实现消费Restful API的web服务。
项目预期效果:
- 有一个网站,专门为练习所用,随机话语,在浏览器,输入这个网址后,会随机给您返回一句话以及他的ID
- 而本项目会带您构建一个spring web服务,然后去消费这个API,在控制台中去输出这些信息。
- 需要至少准备15分钟
- 最好用个IDE,强烈推荐Intellij IDEA
- JDK 1.8以上
- Gradle 4以上或者Maven 3.2以上
- 网址 Spring initializr 安装包
- 去上面网站直接点击下载,注意需要选择maven或者gradle,以及自己可以取个喜欢的名字,然后会有一个zip包,然后解压,用idea打开
-
gitee仓库地址
-
进入页面后点击克隆/下载即可,可以下载zip包,在本地解压,也可以直接克隆, 给个star再走啦~
- 这一小节假设读者的前提工作已经做好,我们进入工程根目录,启动项目:
- gradle: ./gradlew bootRun
- IDE, 直接运行ConsumingRestApplication.java文件
- maven: ./mvnw spring-boot:run
- 因为我们这里返回的数据为:
{
type: "success",
value: {
id: 10,
quote: "Really loving Spring Boot, makes stand alone Spring apps easy."
}
}
- 可以抽象的理解为俩个数据结构,一个Quote(名言)类,一个Value类,
Quote {
type: String,
value: Value
}
Value {
id: long,
quote: String
}
-
java 代码如下:
-
src/main/java/com/example/consumingrest/Value.java文件中写入如下代码
package com.example.consumingrest;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Value {
private Long id;
private String quote;
public Value() {
}
public Long getId() {
return this.id;
}
public String getQuote() {
return this.quote;
}
public void setId(Long id) {
this.id = id;
}
public void setQuote(String quote) {
this.quote = quote;
}
@Override
public String toString() {
return "Value{" +
"id=" + id +
", quote='" + quote + ''' +
'}';
}
}
- src/main/java/com/example/consumingrest/Quote.java 文件中写入如下代码
package com.example.consumingrest;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Quote {
private String type;
private Value value;
public Quote() {
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Value getValue() {
return value;
}
public void setValue(Value value) {
this.value = value;
}
@Override
public String toString() {
return "Quote{" +
"type='" + type + ''' +
", value=" + value +
'}';
}
}
细节讲解
- 首先,Value是一个Quote的一个内部类
- 在src/main/java/com/example/consumingrest/ConsumingRestApplication.java文件中创建如下代码
package com.example.consumingrest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class ConsumingRestApplication {
private static final Logger log = LoggerFactory.getLogger(ConsumingRestApplication.class);
public static void main(String[] args) {
SpringApplication.run(ConsumingRestApplication.class, args);
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
@Bean
public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
return args -> {
Quote quote = restTemplate.getForObject(
"https://quoters.apps.pcfone.io/api/random", Quote.class);
log.info(quote.toString());
};
}
}
细节讲解
- private static final Logger log = LoggerFactory.getLogger(ConsumingRestApplication.class);
- Logger 用来输出日志
- CommandLineRunner实现在应用启动后,去执行相关代码逻辑,且只会执行一次;
- RestTemplate 是关键,其中restTemplate.getForObject即是主角,第一个参数是访问路径,第二个参数是服务器端的返回数据类型,这里用我们定义的Quote.class来接着
- 好啦,本文到此结束,欢迎大家阅读,请一定要自己下载代码并且自己跟着练习一遍哦,talk is cheep, show me the code!
- 如果您的代码运行的有问题,请下载我的代码,并切换到answer分支去对比一下吧,一定要加油哦~
- https://gitee.com/xj18624323263/consuming-rest.git



