共计 3932 个字符,预计需要花费 10 分钟才能阅读完成。
原题目:Spring 认证 | 应用 Spring 构建 RESTful Web 服务
本指南将疏导您实现应用 Spring 创立“Hello, World”RESTful Web 服务的过程。
你将建造什么
您将构建一个承受 HTTP GET 申请的服务 http://localhost:8080/greeting。
它将以问候语的 JSON 示意模式响应,如上面的清单所示:
{“id”:1,”content”:”Hello, World!”}
您能够应用 name 查问字符串中的可选参数自定义问候语,如以下清单所示:
http://localhost:8080/greetin…
的 name 参数值将笼罩的默认值 World,并反映在响应时,如上面的列表显示:
{“id”:1,”content”:”Hello, User!”}
如何实现本指南
与大多数 Spring 入门指南一样,您能够从头开始并实现每个步骤,也能够绕过您曾经相熟的根本设置步骤。无论哪种形式,您最终都会失去无效的代码。
要从头开始,请转到从 Spring Initializr 开始。
要跳过基础知识,请执行以下操作:
下载并解压缩本指南的源代码库,或应用 Git 克隆它:git clone https://github.com/spring-gui…
光盘进入 gs-rest-service/initial
跳转到创立资源示意类。
实现后,您能够依据 中的代码查看后果 gs-rest-service/complete。
从 Spring Initializr 开始
如果您应用 Maven,请拜访 Spring Initializr 以生成具备所需依赖项 (Spring Web) 的新我的项目。
以下清单显示了 pom.xml 抉择 Maven 时创立的文件:
Unresolved directive in – include::initial/pom.xml[]
如果您应用 Gradle,请拜访 Spring Initializr 以生成具备所需依赖项 (Spring Web) 的新我的项目。
以下清单显示了 build.gradle 在您抉择 Gradle 时创立的文件:
Unresolved directive in – include::initial/build.gradle[]
手动初始化(可选)
如果您想手动初始化我的项目而不是应用后面显示的链接,请依照以下步骤操作:
导航到 https://start.spring.io。此服务蕴含应用程序所需的所有依赖项,并为您实现大部分设置。
抉择 Gradle 或 Maven 以及您要应用的语言。本指南假如您抉择了 Java。
单击依赖项并抉择 Spring Web。
单击生成。
下载生成的 ZIP 文件,该文件是应用您的抉择配置的 Web 应用程序的存档。
如果您的 IDE 具备 Spring Initializr 集成,则能够从您的 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)所示:
Unresolved directive in – include::complete/src/main/java/com/example/restservice/Greeting.java[]
此应用程序应用 Jackson JSON 库主动将类型实例编组 Greeting 为 JSON。默认状况下,Web Starter 蕴含 Jackson。
创立资源控制器
在 Spring 构建 RESTful Web 服务的办法中,HTTP 申请由控制器解决。这些组件由 @RestController 注解标识,GreetingController 上面的清单 (from src/main/java/com/example/restservice/GreetingController.java) 通过返回类的新实例来解决 GET 申请:/greetingGreeting
Unresolved directive in – include::complete/src/main/java/com/example/restservice/GreetingController.java[]
这个控制器简洁明了,但背地有很多事件要做。咱们一步一步合成。
该 @GetMapping 正文确保 HTTP GET 申请 /greeting 被映射到该 greeting() 办法。
有其余 HTTP 动词(例如 @PostMappingPOST)的随同正文。还有一个 @RequestMapping 正文,它们都源自,并且能够用作同义词(例如 @RequestMapping(method=GET))。
@RequestParam 将查问字符串参数的值绑定 name 到办法的 name 参数中 greeting()。如果 name 申请中没有该参数 defaultValue,World 则应用 of。
办法主体的实现创立并返回一个新 Greeting 对象,该对象具备 id 和 content 属性,该对象基于来自 counter 和的下一个值,并 name 通过应用 greeting 来格式化给定的 template。
传统 MVC 控制器和后面展现的 RESTful Web 服务控制器之间的次要区别在于 HTTP 响应主体的创立形式。这个 RESTful Web 服务控制器不依赖于视图技术来执行服务器端将问候数据出现为 HTML,而是填充并返回一个 Greeting 对象。对象数据将作为 JSON 间接写入 HTTP 响应。
此代码应用 Spring@RestController 正文,它将类标记为控制器,其中每个办法返回域对象而不是视图。它是同时蕴含 @Controller 和的简写 @ResponseBody。
该 Greeting 对象必须转换为 JSON。因为 Spring 的 HTTP 音讯转换器反对,您无需手动进行此转换。因为 Jackson 2 在类门路上,所以 MappingJackson2HttpMessageConverter 会主动抉择 Spring 来将 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. 或者,您能够应用./gradlew build 并运行 JAR 文件来构建 JAR 文件,如下所示:
java -jar build/libs/gs-rest-service-0.1.0.jar
如果您应用 Maven,则能够应用./mvnw spring-boot:run. 或者,您能够构建 JAR 文件,./mvnw clean package 而后运行 JAR 文件,如下所示:
java -jar target/gs-rest-service-0.1.0.jar
此处形容的步骤创立了一个可运行的 JAR。您还能够构建经典的 WAR 文件。
显示日志输入。该服务应该会在几秒钟内启动并运行。
测试服务
当初服务已启动,请拜访 http://localhost:8080/greeting,您应该看到:
{“id”:1,”content”:”Hello, World!”}
name 通过拜访提供查问字符串参数 http://localhost:8080/greetin…。请留神 content 属性的值如何从 Hello, World! 变为 Hello, User!,如上面的清单所示:
{“id”:2,”content”:”Hello, User!”}
此更改表明 中的 @RequestParam 安顿 GreetingController 按预期工作。该 name 参数已被赋予默认值,World 但能够通过查问字符串显式笼罩。
还要留神 id 属性如何从 1 变为 2。这证实您正在 GreetingController 跨多个申请解决同一个实例,并且它的 counter 字段在每次调用时都按预期递增。
总结
祝贺!您刚刚应用 Spring 开发了一个 RESTful Web 服务。