Web开发

首页 » 常识 » 预防 » 2022就业季Spring认证教你,如何
TUhjnbcbe - 2025/5/9 16:33:00

REST已迅速成为在Web上构建Web服务的事实标准,因为它们易于构建且易于使用。

关于REST如何适应微服务世界还有一个更大的讨论,但是——对于本教程——让我们看看构建RESTful服务。

为什么是REST?REST包含Web的规则,包括其架构、优势和其他一切。这并不奇怪,因为它的作者RoyFielding参与了十几个管理网络运行方式的规范。

有什么好处?Web及其核心协议HTTP提供了一系列功能:

合适的行动(GET,POST,PUT,DELETE,...)

缓存

重定向和转发

安全性(加密和身份验证)

这些都是构建弹性服务的关键因素。但这还不是全部。网络是由许多微小的规范构成的,因此它能够轻松发展,而不会陷入“标准战争”的泥潭。

开发人员能够利用3rd方工具包来实现这些不同的规范,并立即让客户端和服务器技术触手可及。

通过在HTTP之上构建,RESTAPI提供了构建方法:

向后兼容的API

可演进的API

可扩展的服务

安全的服务

一系列无状态服务到有状态服务

重要的是要意识到,无论多么普遍,REST本身并不是一种标准,而是一种方法、一种风格、一组对您的架构的约束,可以帮助您构建Web规模的系统。在本教程中,我们将使用Spring产品组合来构建RESTful服务,同时利用REST的无堆栈特性。

入门

在完成本教程时,我们将使用SpringBoot。转到SpringInitializr并将以下依赖项添加到项目中:

网络

JPA

H2

将名称更改为“工资单”,然后选择“生成项目”。A.zip会下载。解压它。在里面你会发现一个简单的、基于Maven的项目,包括一个pom.xml构建文件(注意:你可以使用Gradle。本教程中的示例将基于Maven。)

SpringBoot可以与任何IDE一起使用。您可以使用Eclipse、IntelliJIDEA、Netbeans等。SpringToolSuite是一个开源的、基于Eclipse的IDE发行版,它提供了Eclipse的JavaEE发行版的超集。它包括使使用Spring应用程序更加容易的功能。这绝不是必需的。但是,如果您想要为您的击键带来额外的魅力,请考虑一下。

到目前为止的故事……

让我们从我们能构建的最简单的东西开始。事实上,为了尽可能简单,我们甚至可以省略REST的概念。(稍后,我们将添加REST以了解差异。)

大图:我们将创建一个简单的工资单服务来管理公司的员工。我们将员工对象存储在(H2内存中)数据库中,并访问它们(通过称为JPA的东西)。然后我们将使用允许通过Internet访问的东西(称为SpringMVC层)包装它。

以下代码在我们的系统中定义了一个Employee。

nonrest/src/main/java/payroll/Employee.java

packagepayroll;

importjava.util.Objects;

importjavax.persistence.Entity;

importjavax.persistence.GeneratedValue;

importjavax.persistence.Id;

Entity

classEmployee{

private

Id

GeneratedValueLongid;

privateStringname;

privateStringrole;

Employee(){}

Employee(Stringname,Stringrole){

this.name=name;

this.role=role;

}

publicLonggetId(){

returnthis.id;

}

publicStringgetName(){

returnthis.name;

}

publicStringgetRole(){

returnthis.role;

}

publicvoidsetId(Longid){

this.id=id;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicvoidsetRole(Stringrole){

this.role=role;

}

Override

publicbooleanequals(Objecto){

if(this==o)

returntrue;

if(!(oinstanceofEmployee))

returnfalse;

Employeeemployee=(Employee)o;

returnObjects.equals(this.id,employee.id)Objects.equals(this.name,employee.name)

Objects.equals(this.role,employee.role);

}

Override

publicinthashCode(){

returnObjects.hash(this.id,this.name,this.role);

}

Override

publicStringtoString(){

return"Employee{"+"id="+this.id+",name="+this.name+\+",role="+this.role+\+};

}

}

尽管很小,但这个Java类包含很多:

Entity是一个JPA注释,用于使该对象准备好存储在基于JPA的数据存储中。

id,name,和role是我们的Employee域对象的属性。id用更多的JPA注释标记以指示它是主键并由JPA提供程序自动填充。

当我们需要创建一个新实例但还没有id时,会创建一个自定义构造函数。

有了这个域对象定义,我们现在可以转向SpringDataJPA来处理繁琐的数据库交互。

SpringDataJPA存储库是与支持针对后端数据存储创建、读取、更新和删除记录的方法的接口。在适当的情况下,一些存储库还支持数据分页和排序。SpringData根据接口中方法命名中的约定来综合实现。

除了JPA之外,还有多个存储库实现。您可以使用SpringDataMongoDB、SpringDataGemFire、SpringDataCassandra等。对于本教程,我们将坚持使用JPA。

Spring使访问数据变得容易。通过简单地声明以下EmployeeRepository接口,我们将能够自动

创建新员工

更新现有的

删除员工

查找员工(一个、全部或按简单或复杂属性搜索)

nonrest/src/main/java/payroll/EmployeeRepository.java

packagepayroll;

importorg.springframework.data.jpa.repository.JpaRepository;

interfaceEmployeeRepositoryextendsJpaRepositoryEmployee,Long{

}

为了获得所有这些免费功能,我们所要做的就是声明一个扩展SpringDataJPA的接口,JpaRepository将域类型指定为Employeeid类型Long。

SpringData的存储库解决方案可以回避数据存储细节,而是使用特定于域的术语解决大多数问题。

信不信由你,这足以启动应用程序!SpringBoot应用程序至少是一个publicstaticvoidmain入口点和

SpringBootApplication注解。这告诉SpringBoot尽可能提供帮助。

nonrest/src/main/java/payroll/PayrollApplication.java

packagepayroll;

importorg.springframework.boot.SpringApplication;

importorg.springframework.boot.autoconfigure.SpringBootApplication;

SpringBootApplication

publicclassPayrollApplication{

publicstaticvoidmain(String...args){

SpringApplication.run(PayrollApplication.class,args);

}

}

SpringBootApplication是一个引入组件扫描、自动配置和属性支持的元注释。在本教程中,我们不会深入探讨SpringBoot的细节,但本质上,它将启动一个servlet容器并提供我们的服务。

然而,没有数据的应用程序不是很有趣,所以让我们预加载它。Spring将自动加载以下类:

nonrest/src/main/java/payroll/LoadDatabase.java

packagepayroll;

importorg.slf4j.Logger;

importorg.slf4j.LoggerFactory;

importorg.springframework.boot.CommandLineRunner;

importorg.springframework.context.annotation.Bean;

importorg.springframework.context.annotation.Configuration;

Configuration

classLoadDatabase{

privatestaticfinalLoggerlog=LoggerFactory.getLogger(LoadDatabase.class);

Bean

CommandLineRunnerinitDatabase(EmployeeRepositoryrepository){

returnargs-{

log.info("Preloading"+repository.save(newEmployee("BilboBaggins","burglar")));

log.info("Preloading"+repository.save(newEmployee("FrodoBaggins","thief")));

};

}

}

加载时会发生什么?

CommandLineRunner加载应用程序上下文后,SpringBoot将运行所有bean。

此运行程序将请求EmployeeRepository您刚刚创建的副本。

使用它,它将创建两个实体并存储它们。

右键单击并运行PayRollApplication,这就是你得到的:

显示数据预加载的控制台输出片段

...-08-:36:26.INFO---[main]payroll.LoadDatabase:预加载员工(id=1,name=BilboBaggins,角色=窃贼)-08-:36:26.INFO---[main]payroll.LoadDatabase:预加载员工(id=2,name=FrodoBaggins,role=thief)...

这不是整个日志,而只是预加载数据的关键部分。(确实,检查整个控制台。这太棒了。)

.......未完待续......

#Spring#

以上就是今天关于Spring的一些讨论,对你有帮助吗?如果你有兴趣深入了解,欢迎到Spring中国教育管理中心留言交流!

1
查看完整版本: 2022就业季Spring认证教你,如何