本指南将指导您使用Spring建立 "Hello, World "RESTful Web服务的过程。java
你将创建一个服务,它将接受HTTP GET请求,地址是git
http://localhost:8080/greeting。
它将响应一个JSON表示的问候语,以下面的列表所示。github
{"id":1, "content": "Hello, World!"}
您能够在查询字符串中使用可选的名称参数自定义问候语,以下列表所示。web
http://localhost:8080/greeting?name=User
name参数值会覆盖World的默认值,并反映在响应中,以下列表所示。spring
{"id":1, "content": "Hello,User!"}
JDK 1.8或更高版本
Maven 3.2+apache
下载安装Java
配置JAVA_HOME = JDK目录浏览器
C:/Users/Administrator/.m2/settings.xml服务器
<settings> <mirrors> <mirror> <id>aliyun</id> <name>aliyun</name> <mirrorOf>central</mirrorOf> <!-- 国内推荐阿里云的Maven镜像 --> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror> </mirrors> </settings>
要跳过基本步骤,请执行如下操做。mvc
下载并解压本指南的源码库,或者使用Git克隆:app
git clone https://github.com/spring-guides/gs-rest-service.git。 cd gs-rest-service/complete mvnw package java -jar target
而后打开浏览器,贴入以下地址:
http://localhost:8080/greeting。
它将响应一个JSON表示的问候语,以下面的列表所示。
{"id":1, "content": "Hello, World!"}
使用https://start.spring.io/ 生成一个zip文件,解压后获得一个目录,其内是脚手架代码
进入目录,执行:
mvnw package
漫长的执行后,看到BUILD SUCCESS
java –jar target\<JARFILE>
对于全部的Spring应用,你应该从Spring Initializr开始。Initializr提供了一种快速的方法来引入应用程序所需的全部依赖关系,并为您作了大量的设置。这个例子只须要Spring Web依赖关系。
您能够直接从Spring Initializr中获取包含必要依赖项的Maven构建文件。如下列表显示了选择Maven时建立的pom.xml文件。
对于全部的Spring应用,你应该从Spring Initializr开始。Initializr提供了一种快速的方法来引入应用程序所需的全部依赖关系,并为您作了大量的设置。这个例子只须要Spring Web依赖关系。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>rest-service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>rest-service</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
如今你已经创建了项目和构建系统,你能够建立你的Web服务。经过思考服务交互开始这个过程。
该服务将处理对/greeting的GET请求,在查询字符串中可选择使用名称参数。GET请求应该返回一个200 OK的响应,在body中包含表明问候语的JSON。它应该相似于下面的输出。
{ "id": 1, "content"。"Hello,world!" }
id字段是问候语的惟一标识符,内容是问候语的文本表示。
为了对问候语的表示进行建模,建立一个资源表示类。为此,提供一个Java对象,其中包含字段、构造函数以及id和内容数据的访问器,以下列表所示(来自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.) public Greeting(long id, String content) { this.id = id.com this.content = content; } public long getId() { return id; } public String getContent() { return content; } }
该应用程序使用Jackson JSON库自动将Greeting类型的实例聚集成JSON。web启动程序默认包含Jackson。
在Spring构建RESTful Web服务的方法中,HTTP请求由一个控制器处理。这些组件由@RestController注解标识,下面列表中显示的GreetingController(来自src/main/java/com/example/restservice/GreetingController.java)经过返回Greeting类的新实例来处理对/greeting的GET请求。
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)); } }
这款控制器简洁明了,但在引擎盖下有不少东西。咱们一步步分解它。
也看看应用代码:
package com.example.restservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class RestServiceApplication { public static void main(String[] args) { SpringApplication.run(RestServiceApplication.class, args); } }
@SpringBootApplication是一个方便的注解,它添加了如下全部内容。
main()方法使用Spring Boot的SpringApplication.run()方法来启动应用程序。你注意到没有一行XML吗?也没有web.xml文件。这个web应用程序是100%纯Java的,你不须要处理任何管道或基础设施的配置。
你能够用Gradle或Maven从命令行运行应用程序。你也能够构建一个可执行的JAR文件,其中包含全部必要的依赖关系、类和资源,而后运行它。构建一个可执行的jar,能够很容易地在整个开发生命周期中,在不一样的环境中,将服务做为一个应用来发布、版本和部署,等等。
若是你使用Gradle,你能够经过使用./gradlew bootRun来运行应用程序。或者,你能够经过使用./gradlew build来构建JAR文件,而后运行JAR文件,以下所示。
java -jar build/libs/gs-rest-service-0.1.0.jar
若是你使用Maven,你可使用./mvnw spring-boot:run来运行应用程序。另外,你也能够用./mvnw clean package构建JAR文件,而后运行JAR文件,以下所示。
java -jar target/gs-rest-service-0.1.0.jar
这里描述的步骤能够建立一个可运行的JAR。你也能够创建一个经典的WAR文件。
日志输出会显示。服务应该在几秒钟内启动并运行。
如今服务已经开通,请访问http://localhost:8080/greeting,在那里你应该能够看到。
{"id":1, "content": "你好,世界!"}
经过访问http://localhost:8080/greeting?name=User,提供名称查询字符串参数。请注意content属性的值是如何从Hello,World!变为Hello,User!的,以下列表所示。
{"id":2, "content": "Hello, User!"}
这个变化代表GreetingController中的@RequestParam安排按照预期工做。名称参数的默认值是World,但能够经过查询字符串明确地重写。
还请注意id属性如何从1变成了2,这证实你在多个请求中针对同一个GreetingController实例工做,而且每次调用时,它的计数器字段都按预期递增。
恭喜你!你刚刚用Spring开发了一个RESTful Web服务。你刚刚用Spring开发了一个RESTful web服务。