Spring官网的Guides部分,提供了数十个简短的学习用例,个人感觉是非常好的学习资源,今天的学习就是该Guides的第一个例子:开发一个简单的RESTful Web Service。该例子的英文页面为:https://spring.io/guides/gs/rest-service/。
- 使用Spring Initializr构建pom.xml文件
通常,构建Spring应用程序的第一步都是使用spring initializr构建一个描述项目的pom.xml文件,然后就可以使用maven来管理该开发项目。Spring initializr是spring官方提供的一个在线工具,其地址为:https://start.spring.io/。
打开initializr页面后
Project项选择Maven Project;
Language项选择Java;
Spring Boot项选择你希望的spring版本,我通常选择正式release的版本,就是不带M1和SNAPSHOT标志的版本。
Group项可以填开发单位的信息,我是个人,所以我填我名字的拼音com.boliang。
Artifact项可以填项目的名称,我填restservice。
Dependencies项为该项目依赖的其他组件,这里我们只依赖于Spring Web
最后点击"Explore - Ctrl + Space"按钮,可以查看在线生成的pom.xml文件,之后可以选择将该文件下载到本地的项目文件夹。 - 在项目的src/main/java/目录下创建Greeting.java文件,内容如下:
package com.boliang.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; } }
- 在项目的src/main/java/目录下创建GreetingController.java文件,内容如下:
package com.boliang.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 注释表示GreetingController 类是一个控制器
@GetMapping 注释表示greeting方法对应到对/greeting URI的GET方法上
@RequestParam 注释表示将http请求中的name参数的是值对应到greeting方法的name参数。 - 在项目src/main/java/目录下创建RestService.java,内容为如下:
package com.boliang.restservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class RestService { public static void main(String[] args) { SpringApplication.run(RestService .class, args); } }
- 运行
在pom.xml所在的项目目录下运行以下命令:mvn spring-boot:run
接下来你会看到maven自动下载一大堆东西,这个过程可能会比较久,耐心等待一会,你会看到spring运行的界面:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.4.RELEASE) 2020-02-07 21:47:58.269 INFO 15088 --- [ main] com.boliang.restservice.RestService : Starting RestService on DESKTOP-N0EF3ON with PID 15088 (C:\Users\bolia\eclipse-workspace\rest-service\target\classes started by bolia in C:\Users\bolia\eclipse-workspace\rest-service) 2020-02-07 21:47:58.272 INFO 15088 --- [ main] com.boliang.restservice.RestService : No active profile set, falling back to default profiles: default 2020-02-07 21:47:59.403 INFO 15088 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2020-02-07 21:47:59.415 INFO 15088 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2020-02-07 21:47:59.419 INFO 15088 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.30] 2020-02-07 21:47:59.531 INFO 15088 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2020-02-07 21:47:59.533 INFO 15088 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1192 ms 2020-02-07 21:47:59.712 INFO 15088 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2020-02-07 21:47:59.890 INFO 15088 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2020-02-07 21:47:59.898 INFO 15088 --- [ main] com.boliang.restservice.RestService : Started RestService in 2.071 seconds (JVM running for 2.526)
-
访问服务
接下来打开浏览器,在地址栏输入:http://127.0.0.1:8080/greeting 将可以看到:
{"id":1,"content":"Hello, World!"}
我们还可以加上一个参数,在地址栏输入:http://127.0.0.1:8080/greeting?name=liangbo 将可以看到:
{"id":1,"content":"Hello, liangbo!"} -
结束程序可以按Ctrl+C
-
打包
在项目根目录输入:mvn package
命令执行完成以后,在target目录下会生成 restservice-0.0.1-SNAPSHOT.jar,文件大概在10多兆,这是打包了所有依赖库的包,可以直接在java环境中运行。
-
运行jar
在项目根目录输入:java -jar target/restservice-0.0.1-SNAPSHOT.jar
然后就可以看到类似第5步的运行界面。
至此,此例完成。