从0基于Spring创建一个RESTFul web服务
学习Spring最好的方法是什么:看官方文档,因为官方文档的信息最全,不会出现某些包过时的情况,但是官方文档很难看懂,即使看懂也不知道怎么去练习怎么办,不用怕,Spring官方都帮你想好了,
Spring Guides:https://spring.io/guides 可以说是Spring官方对新手最友好的项目教程,一个项目花费的时间只需要仅仅十几二十分钟,架子搭好了,只需要关注最重要的部分即可。
但是官方文档都是英语怎么办,不用怕,本系列文章会帮你一一捋清楚,而且会更进一步解释部分官方文档里面没有详细说明的内容。下面来一起开始吧,帮您快速进入Spring的世界!
项目说明
本项目旨在为练习人员快速熟悉并实现Restful的web服务,成果是一个API的简单接口。
项目预期效果:
访问特定路径,可以返回一个id和打招呼的内容,以及传入的参数
项目前提条件
- 需要至少准备15分钟
- 最好用个IDE,强烈推荐Intellij IDEA
- JDK 1.8以上
- Gradle 4以上或者Maven 3.2以上
项目初始化
利用spring initializr网站
- 网址 Spring initializr 安装包
- 去上面网站直接点击下载,注意需要选择maven或者gradle,以及自己可以取个喜欢的名字,然后会有一个zip包,然后解压,用idea打开
利用gitte网站直接克隆下载本文的练习仓库
-
进入页面后点击克隆/下载即可,可以下载zip包,在本地解压,也可以直接克隆
项目启动
- 这一小节假设读者的前提工作已经做好,我们进入工程根目录,启动项目:
- gradle:
./gradlew bootRun
- IDE, 直接运行
RestServiceApplication.java
文件 - maven:
./mvnw spring-boot:run
- gradle:
项目搭建
Greeting 类文件
- 在
src/main/java/com/example/restservice/
目录下创建Greeting.java
文件,用来作为返回给前端的数据结构,内容如下:建议小白自己敲一遍,加深肌肉记忆
package com.example.restservice;
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
- 利用在创建Greeting的时候,有个小技巧,在把属性id和content写上后,可以右键生成构造函数以及get方法,并且可以尝试用快捷键,在我司这是必备技能哦。
Controller文件
- 在
src/main/java/com/example/restservice/
目录下创建GreetingController.java
文件,用来处理HTTP请求,内容如下:
package com.example.restservice;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
@RestController
由两个注解组成,点进去这个注解(mac按住command + B,其他IDE以及系统可以自行百度),可以看见由俩个注解组成:@Controller
,Controller其实就是个@Component
(用来被自动扫描到),只是一般把处理HTTP请求这一层加上@Controller
注解,用来特殊标识@ResponseBody
, 用来讲Controller里面方法返回的对象,通过适当的转换器,转换为特定的格式后,写入到response对象的body区(响应体)中,通常为JSON或者XML格式
@GetMapping("/greeting")
,用来注解方法,按上述方法点开后其实就是@RequestMapping(method = RequestMethod.GET)
,用来标识这个方法是个GET方法,后面括号中的"/greeting"
为路径,表示需要访问localhost:8080/greeting
才能进入这个方法@RequestParam(value = "name", defaultValue = "World")
表示方法接收为name的参数,默认是"World", 通过请求localhost:8080/greeting?name=yourName
来进行传入AtomicLong
- 可以看到我们对声明为
AtomicLong
的变量counter
在方法里进行获取并自增的操作,为什么不用Long类型呢? AtomicLong
作用是对长整形进行原子操作(多线程中尤为重要), 因为不是本文的重点,大家可以自行百度进行了解
- 可以看到我们对声明为
再次启动项目
- 访问
http://localhost:8080/greeting?name=EDG
,可以出现下图效果。
结束语
- 好啦,本文到此结束,欢迎大家阅读,请一定要自己下载代码并且自己跟着练习一遍哦,talk is cheep, show me the code!
- 如果您的代码运行的有问题,请下载我的代码,并切换到answer分支去对比一下吧,一定要加油哦~
https://gitee.com/xj18624323263/spring-guide-restful-web-service.git