当前位置: 首页 > 后端技术 > Java

Spring认证指南-了解如何使用Spring创建超媒体驱动的RESTfulWeb服务

时间:2023-04-01 16:01:17 Java

Spring认证指南-了解如何使用Spring创建超媒体驱动的RESTfulWeb服务。(Spring中国教育管理中心)SpringCertification:LearnhowtouseSpringtocreateahypermedia-drivenRESTfulWebserviceBuildahypermedia-drivenRESTfulWebservice本指南将带您创建一个“Hello,World”超媒体驱动的RESTWeb使用Spring服务进程。超媒体是REST的一个重要方面。它允许您构建在很大程度上解耦客户端和服务器的服务,并让它们独立发展。为REST资源返回的表示不仅包含数据,还包含指向相关资源的链接。因此,表示的设计对于整体服务的设计至关重要。您将构建什么您将使用SpringHATEOAS构建一个超媒体驱动的REST服务:一个API库,可用于创建到SpringMVC控制器的链接,构建资源表示,并控制它们如何呈现为支持的超媒体格式(例如HAL)。该服务将接受对http://localhost:8080/greeting的HTTPGET请求。它将以用最简单的超媒体元素丰富的JSON表示的问候语来响应,这是一个指向资源本身的链接。以下清单显示了输出:{"content":"Hello,World!","_links":{"self":{"href":"http://localhost:8080/greeting?name=World"}}响应已经表明您可以使用查询字符串中的可选名称参数自定义问候语,如以下清单所示:http://localhost:8080/greetin...名称参数值覆盖默认的World并且是反映在响应中,如以下清单所示:{"content":"Hello,User!","_links":{"self":{"href":"http://localhost:8080/greeting?name=User"}}}Whatyouneed大约15分钟最喜欢的文本编辑器或IDEJDK1.8或更高版本Gradle4+或Maven3.2+您也可以将代码直接导入IDE:SpringToolSuite(STS)IntelliJIDEA如何完成此操作像大多数Spring入门指南一样的指南,您可以从头开始并完成每个步骤,或者您可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会得到工作代码。要从头开始,请继续使用SpringInitializr。跳过基础知识:下载并解压本指南的源代码存储库,或使用Git克隆它:gitclonehttps://github.com/spring-gui...cdintogs-rest-hateoas/initial继续创建资源表示类。完成后,您可以根据gs-rest-hateoas/complete中的代码检查结果。从SpringInitializr开始,您可以使用这个预初始化的项目并单击生成以下载ZIP文件。该项目配置为适合本教程中的示例。手动初始化项目:导航到https://start.spring.io。该服务会引入您的应用程序所需的所有依赖项,并为您完成大部分设置。选择Gradle或Maven以及您要使用的语言。本指南假设您选择了Java。单击依赖项并选择SpringHATEOAS。单击生成。下载生成的ZIP文件,它是根据您的选择配置的Web应用程序的存档。如果您的IDE集成了SpringInitializr,您可以从IDE中完成此过程。您还可以从Github中fork项目并在您的IDE或其他编辑器中打开它。添加JSON库因为您将使用JSON发送和接收信息,所以您需要一个JSON库。在本指南中,您将使用JaywayJsonPath库。要在您的Maven构建中包含此库,请将以下依赖项添加到您的pom.xml文件:com.jayway.jsonpathjson-pathtest复制以下清单显示完整的pom.xml文件:4.0.0org.springframework.bootspring-boot-starter-parent2.6.3com.examplerest-hateoas-complete0.0.1-SNAPSHOTrest-hateoas-completeSpringBoot演示项目1.8org.springframework.bootspring-boot-starter-hateoasorg.springframework.bootspring-boot-starter复制代码-测试测试org.springframework.bootspring-boot-maven-plugin要将此库包含在您的Gradle构建中,请将以下依赖项添加到您的build.gradle文件中:testCompile'c??om.jayway.jsonpath:json-path'复制以下清单显示完整的build.gradle文件:plugins{id'org.springframework.boot'version'2.6.3'id'io.spring.dependency-management'version'1.0.11.RELEASE'id'java'}group='com.example'version='0.0.1-SNAPSHOT'sourceCompatibility='1.8'repositories{mavenCentral()}dependencies{implementation'org.springframework.boot:spring-boot-starter-hateoas'testImplementation'org.springframework.boot:spring-boot-starter-test'}test{useJUnitPlatform()}创建资源展示类现在您已经设置了项目和构建系统,您可以创建Web服务从考虑一个服务交互开始的过程。该服务将公开一个资源/greeting来处理GET请求,可选地在查询字符串中使用名称参数。GET请求应返回200OK响应,并在问候文本中包含JSON。除其他事项外,资源的JSON表示将通过_links属性中的超媒体元素列表进行丰富。最基本的形式是指向资源本身的链接。表示应类似于以下列表:{"content":"Hello,World!","_links":{"self":{"href":"http://localhost:8080/greeting?name=World"}}}content是问候语的文本表示。_links元素包含一个链接列表(在本例中,恰好是一个链接,其关系类型为rel和href属性,指向被访问的资源)。要对问候表示进行建模,请创建一个资源表示类。由于_links属性是表示模型的基本属性,因此SpringHATEOAS附带了一个基类(称为RepresentationModel),允许您添加实例链接并确保它们如前所示呈现。创建一个普通的旧java对象,它扩展RepresentationModel并为内容添加字段、访问器和构造函数,如以下清单所示(来自src/main/java/com/example/resthateoas/Greeting.java):packagecom.example.resthateoas;导入org.springframework.hateoas.RepresentationModel;导入com.fasterxml.jackson.annotation.JsonCreator;导入com.fasterxml.jackson.annotation.JsonProperty;公共类GreetingextendsRepresentationModel{privatefinalStringcontent;@JsonCreatorpublicGreeting(@JsonProperty("content")Stringcontent){this.content=content;}publicStringgetContent(){returncontent;}}@JsonCreator:指示Jackson如何创建此POJO的实例。@JsonProperty:标记Jackson应该将此构造函数参数放入的字段。正如您稍后将在本指南中看到的那样,Spring将使用JacksonJSON库自动将Greeting类型的实例编组为JSON。接下来,创建将提供这些问候语的资源控制器。创建REST控制器在Spring构建RESTfulWeb服务的方法中,HTTP请求由控制器处理。组件由@RestController注释标识,它结合了@Controller和@ResponseBody注释。以下GreetingController(来自)通过返回类的新实例来自src/main/java/com/example/resthateoas/GreetingController.java处理GET请求:/greetingGreetingpackagecom.example.resthateoas;importstaticorg.springframework.hatevoas.server..WebMvcLinkBuilder.*;导入org.springframework.http.HttpEntity;导入org.springframework.http.HttpStatus;导入org.springframework.http.ResponseEntity;导入org.springframework.web.bind.annotation.RestController;导入org.springframework。web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;@RestControllerpublicclassGreetingController{privatestaticfinalStringTEMPLATE="Hello,%s!";@RequestMapping("/greeting")publicHttpEntitygreeting(@RequestParam(value="name",defaultValue="World")Stringname){Greetinggreeting=newGreeting(String.format(TEMPLATE,name));greeting.add(linkTo(methodOn(Gr??eetingController.class).greeting(名称)).withSelfRel());returnnewResponseEntity<>(greeting,HttpStatus.OK);}}这个controller简单明了,但是有很多事情要做,我们可以一步步分解。@RequestMapping注释确保将HTTP请求/问候语映射到greeting()方法。上面的例子没有指定GETvs。PUT、POST等,因为默认情况下@RequestMapping会映射所有HTTP操作。使用@GetMapping("/greeting")缩小此映射。在这种情况下,您还希望导入org.springframework.web.bind.annotation.GetMapping;.@RequestParam以将查询字符串参数名称的值绑定到greeting()方法的名称参数。由于使用了defaultValue属性,因此隐式不需要此查询字符串参数。如果请求中不存在,则使用defaultValueofWorld。因为类上存在@RestController注解,所以在问候方法中添加了一个隐式的@ResponseBody注解。这会导致SpringMVC将返回的HttpEntity及其有效负载(问候语)直接呈现给响应。方法实现中最有趣的部分是如何创建到控制器方法的链接并将其添加到表示模型。linkTo(…)和methodOn(…)都是静态方法,ControllerLinkBuilder允许您在控制器上伪造方法调用。返回的LinkBuilder将检查控制器方法的映射注释,以准确构建该方法映射到的URI。SpringHATEOAS尊重各种X-FORWARDED-标头。如果将SpringHATEOAS服务放在代理后面并使用标头X-FORWARDED-HOST正确配置它,生成的链接将被正确格式化。调用withSelfRel()以创建您添加到Greeting表示模型的Link实例。@SpringBootApplication是一个方便的注释,它添加了以下所有内容:@Configuration:将类标记为应用程序上下文的bean定义源。@EnableAutoConfiguration:告诉SpringBoot开始添加基于类路径设置、其他bean和各种属性设置的bean。例如,如果spring-webmvc在classpath上,则此注解将应用程序标记为Web应用程序并激活关键行为,例如设置DispatcherServlet。@ComponentScan:告诉Spring在包com/example中查找其他组件、配置和服务,让它找到控制器。main()方法使用SpringBoot的SpringApplication.run()方法来启动应用程序。您是否注意到没有一行XML?也没有web.xml文件。Web应用程序是100%纯Java,您无需处理任何管道或基础设施配置。构建一个可执行JAR,您可以使用Gradle或Maven从命令行运行应用程序。您还可以构建一个包含所有必要依赖项、类和资源的可执行JAR文件并运行它。构建可执行jar可以在整个开发生命周期中跨不同环境等轻松交付、版本化和部署为应用程序服务。如果你使用Gradle,你可以使用./gradlewbootRun。或者,您可以使用./gradlewbuild构建JAR文件,然后像这样运行JAR文件:java-jarbuild/libs/gs-rest-hateoas-0.1.0.jar如果您使用Maven,则可以使用./mvnw弹簧启动:运行。或者,您可以使用./mvnwcleanpackage构建JAR文件,然后运行??JAR文件,如下所示:java-jartarget/gs-rest-hateoas-0.1.0.jar此处描述的步骤创建一个可运行的JAR。您还可以构建经典WAR文件。显示日志输出。该服务应在几秒钟内启动并运行。测试服务现在服务已经启动,访问http://localhost:8080/greeting,您应该看到以下内容:{"content":"Hello,World!","_links":{"self":{"href":"http://localhost:8080/greeting?name=World"}}}name通过访问以下URL提供查询字符串参数:http://localhost:8080/greeting....注意content属性从Hello,World!您好,用户!并且指向self的链接的href属性也反映了这种变化,如以下清单所示://localhost:8080/greeting?name=User"}}}此更改表明@RequestParam安排GreetingController按预期工作。name参数已被赋予默认值World,但始终可以通过查询字符串显式覆盖。总结祝贺!您刚刚使用SpringHATEOAS开发了超媒体驱动的RESTfulWeb服务。