Blogger Information
Blog 29
fans 0
comment 0
visits 17916
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务
IT胶囊
Original
393 people have browsed it

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

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

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

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

合适的行动 ( GET, POST, PUT, DELETE, ...)缓存重定向和转发安全性(加密和身份验证)

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

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

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

向后兼容的 API可演进的 API可扩展的服务安全的服务一系列无状态服务到有状态服务

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

入门

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

网络JPAH2

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

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

到目前为止的故事……

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

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

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

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

package payroll;

import java.util.Objects;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

@Entity

class Employee {

private @Id @GeneratedValue Long id;

private String name;

private String role;

Employee() {}

Employee(String name, String role) {

this.name = name;

this.role = role;

}

public Long getId() {

return this.id;

}

public String getName() {

return this.name;

}

public String getRole() {

return this.role;

}

public void setId(Long id) {

this.id = id;

}

public void setName(String name) {

this.name = name;

}

public void setRole(String role) {

this.role = role;

}

@Override

public boolean equals(Object o) {

if (this == o)

return true;

if (!(o instanceof Employee))

return false;

Employee employee = (Employee) o;

return Objects.equals(this.id, employee.id) && Objects.equals(this.name, employee.name)

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

}

@Override

public int hashCode() {

return Objects.hash(this.id, this.name, this.role);

}

@Override

public String toString() {

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

}

}

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

@Entity是一个 JPA 注释,用于使该对象准备好存储在基于 JPA 的数据存储中。id, name, 和role是我们的 Employee域对象的属性。id用更多的 JPA 注释标记以指示它是主键并由 JPA 提供程序自动填充。当我们需要创建一个新实例但还没有 id 时,会创建一个自定义构造函数。

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

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

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

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

创建新员工更新现有的删除员工查找员工(一个、全部或按简单或复杂属性搜索)

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

package payroll;

import org.springframework.data.jpa.repository.JpaRepository;

interface EmployeeRepository extends JpaRepository<Employee, Long> {

}

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

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

信不信由你,这足以启动应用程序!Spring Boot 应用程序至少是一个public static void main入口点和@SpringBootApplication注解。这告诉 Spring Boot 尽可能提供帮助。

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

package payroll;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class PayrollApplication {

public static void main(String... args) {

SpringApplication.run(PayrollApplication.class, args);

}

}

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

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

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

package payroll;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.boot.CommandLineRunner;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

class LoadDatabase {

private static final Logger log = LoggerFactory.getLogger(LoadDatabase.class);

@Bean

CommandLineRunner initDatabase(EmployeeRepository repository) {

return args -> {

log.info("Preloading " + repository.save(new Employee("Bilbo Baggins", "burglar")));

log.info("Preloading " + repository.save(new Employee("Frodo Baggins", "thief")));

};

}

}

加载时会发生什么?

CommandLineRunner加载应用程序上下文后,Spring Boot 将运行所有bean。此运行程序将请求EmployeeRepository您刚刚创建的副本。使用它,它将创建两个实体并存储它们。

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

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

...2018-08-09 11:36:26.169 INFO 74611 --- [main] payroll.LoadDatabase:预加载员工(id=1,name=Bilbo Baggins,角色=窃贼)2018-08-09 11:36:26.174 INFO 74611 --- [main] payroll.LoadDatabase:预加载员工(id=2,name=Frodo Baggins,role=thief)...

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

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

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


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