Blogger Information
Blog 29
fans 0
comment 0
visits 17825
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
构建 RESTful Web 服务
IT胶囊
Original
435 people have browsed it

本指南将引导您完成使用 Spring 创建“Hello, World”RESTful Web 服务的过程。

微信截图_20220720104951.png

你将建造什么

您将构建一个接受 HTTP GET 请求的服务
http://localhost:8080/greeting。

它将以 JSON 表示的问候进行响应,如以下清单所示:

{"id":1,"content":"Hello, World!"}复制

您可以在查询字符串中使用可选name参数自定义问候语,如以下清单所示:

http://localhost:8080/greeting?name=User复制

name参数值覆盖默认值World并反映在响应中,如以下清单所示:

{"id":1,"content":"Hello, User!"}复制

你需要什么

约15分钟最喜欢的文本编辑器或 IDEJDK 1.8或更高版本Gradle 4+或Maven 3.2+您还可以将代码直接导入 IDE:弹簧工具套件 (STS)IntelliJ IDEA

如何完成本指南

像大多数 Spring入门指南一样,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会得到工作代码。

要从头开始,请继续从 Spring Initializr 开始。

要跳过基础知识,请执行以下操作:

下载并解压缩本指南的源存储库,或使用Git克隆它:git clone https://github.com/spring-guides/gs-rest-service.git光盘进入gs-rest-service/initial继续创建资源表示类。

完成后,您可以对照中的代码检查结果gs-rest-service/complete。

从 Spring Initializr 开始

您可以使用这个预先初始化的项目并单击 Generate 下载 ZIP 文件。此项目配置为适合本教程中的示例。

手动初始化项目:

导航到https://start.spring.io。该服务提取应用程序所需的所有依赖项,并为您完成大部分设置。选择 Gradle 或 Maven 以及您要使用的语言。本指南假定您选择了 Java。单击Dependencies并选择Spring Web。单击生成。下载生成的 ZIP 文件,该文件是根据您的选择配置的 Web 应用程序的存档。

如果您的 IDE 具有 Spring Initializr 集成,您可以从您的 IDE 完成此过程。

你也可以从 Github 上 fork 项目并在你的 IDE 或其他编辑器中打开它。

创建资源表示类

现在您已经设置了项目和构建系统,您可以创建您的系统 Web 服务。

从考虑服务交互开始这个过程。

该服务将处理对 的GET请求/greeting,可以选择name在查询字符串中使用参数。该GET请求应200 OK在表示问候的正文中返回带有 JSON 的响应。它应该类似于以下输出:

{    "id": 1,    "content": "Hello, World!"}复制

该id字段是问候语的唯一标识符,是问候语content的文本表示。

要对问候表示建模,请创建一个资源表示类。为此,请提供一个普通的方法 Java 对象,其中包含用于id和content数据的字段、构造函数和访问器,如以下清单(来自
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;
}
}

此应用程序使用Jackson JSON库将类型的实例自动编组Greeting为 JSON。网络启动器默认包含 Jackson。

创建资源控制器

在 Spring 构建 RESTful Web 服务的方法中,HTTP 请求由控制器处理。这些组件由@RestController注释标识,GreetingController下面的清单 (from )通过返回类的新实例来
src/main/java/com/example/restservice/GreetingController.java处理GET请求:/greetingGreeting

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;@RestControllerpublic 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));
}
}复制

这个控制器简洁明了,但引擎盖下有很多事情要做。我们一步一步分解。

@GetMapping注释确保 HTTP GET 请求/greeting映射到greeting()方法。

有其他 HTTP 动词的伴随注释(例如@PostMappingPOST)。还有一个@RequestMapping它们都源自的注释,并且可以用作同义词(例如@RequestMapping(method=GET))。

@RequestParam将查询字符串参数的值绑定name到方法的name参数中greeting()。如果name请求中没有参数,则使用defaultValueof World。

方法体的实现创建并返回一个新Greeting对象,该对象具有id和content基于下一个值的属性,并使用 greetingcounter格式化给定的格式。nametemplate

传统 MVC 控制器和前面显示的 RESTful Web 服务控制器之间的一个关键区别是 HTTP 响应主体的创建方式。这个 RESTful Web 服务控制器不是依靠视图技术来执行服务器端将问候数据呈现为 HTML,而是填充并返回一个Greeting对象。对象数据将作为 JSON 直接写入 HTTP 响应。

此代码使用 Spring@RestController注释,它将类标记为控制器,其中每个方法都返回域对象而不是视图。它是同时包含@Controller和的简写@ResponseBody。

该Greeting对象必须转换为 JSON。感谢 Spring 的 HTTP 消息转换器支持,您无需手动进行此转换。因为Jackson 2在类路径上,所以会自动选择 Spring
MappingJackson2HttpMessageConverter将Greeting实例转换为 JSON。

@SpringBootApplication是一个方便的注释,它添加了以下所有内容:

@Configuration: 将类标记为应用程序上下文的 bean 定义源。@EnableAutoConfiguration:告诉 Spring Boot 根据类路径设置、其他 bean 和各种属性设置开始添加 bean。例如,如果spring-webmvc位于类路径上,则此注释将应用程序标记为 Web 应用程序并激活关键行为,例如设置DispatcherServlet.@ComponentScan: 告诉 Spring 在包中查找其他组件、配置和服务com/example,让它找到控制器。

该main()方法使用 Spring Boot 的SpringApplication.run()方法来启动应用程序。您是否注意到没有一行 XML?也没有web.xml文件。这个 Web 应用程序是 100% 纯 Java,您不必处理任何管道或基础设施的配置。

构建一个可执行的 JAR

您可以使用 Gradle 或 Maven 从命令行运行应用程序。您还可以构建一个包含所有必要依赖项、类和资源的单个可执行 JAR 文件并运行它。构建可执行 jar 可以在整个开发生命周期、跨不同环境等中轻松地作为应用程序交付、版本化和部署服务。

如果您使用 Gradle,则可以使用./gradlew bootRun. 或者,您可以使用构建 JAR 文件./gradlew build,然后运行 JAR 文件,如下所示:

java -jar build/libs/gs-rest-service-0.1.0.jar

如果您使用 Maven,则可以使用./mvnw spring-boot:run. 或者,您可以使用构建 JAR 文件,./mvnw clean package然后运行该 JAR 文件,如下所示:

java -jar 目标/gs-rest-service-0.1.0.jar

此处描述的步骤创建了一个可运行的 JAR。您还可以构建经典的 WAR 文件。

显示记录输出。该服务应在几秒钟内启动并运行。

测试服务

现在服务已经启动,访问
http://localhost:8080/greeting,您应该会看到:

{"id":1,"content":"Hello, World!"}复制

通过访问提供name查询字符串参数
http://localhost:8080/greeting?name=User。content请注意属性的值如何从Hello, World!变为Hello, User!,如以下清单所示:

{"id":2,"content":"Hello, User!"}复制

这一变化表明,@RequestParam安排在GreetingController按预期工作。该name参数已被赋予默认值,World但可以通过查询字符串显式覆盖。

还要注意id属性是如何从1变为 的2。这证明您正在GreetingController跨多个请求处理同一个实例,并且其counter字段在每次调用时都按预期递增。

概括

恭喜!您刚刚使用 Spring 开发了一个 RESTful Web 服务。

配图 | Spring(认证)中国教育管理中心 

欢迎关注“Spring管理中心”官⽅VX公众号,获取更多信息资讯


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post