如何使用 Spring Boot 创建 REST API ?

2023-10-26 14:20:36 浏览数 (2)

如何使用 Spring Boot 创建 REST API ?

Spring Boot 是一个功能强大的框架,可以轻松创建 RESTful API。在本文中,我们将逐步指导如何使用 MySQL 和 JPA 在 Spring Boot 中创建 RESTful API。我们将首先创建一个新的 Spring Boot 项目并根据我们的需求对其进行配置。

逐步实施

第1步:搭建开发环境

在开始之前,我们需要设置我们的开发环境。我们需要安装以下软件:

  • Java 开发工具包 (JDK)
  • Intellij(或任何其他首选 IDE,如 Eclipse)
  • MySQL服务器

第2步:创建Spring Boot项目

第一步是使用 Spring Boot Initializer 创建一个新的 Spring Boot 项目。打开 Web 浏览器并转到Spring Initializer。

设置以下选项
  • 项目: Maven Project/Gradle according to your needs
  • 编程语言: Java
  • Spring Boot: 2.6.2 (or the latest version)
  • Group: com.boot
  • Artifact: spring boot API/any desired info of your own choice
  • 描述: Demo Project for Spring Boot API/ any information you like about the project
  • 包: Jar
  • Java: 11

单击“添加依赖项”按钮并添加以下依赖项

  • Spring数据JPA
  • MySQL驱动程序

选择这些依赖项并单击“生成”按钮。将下载的项目 ZIP 文件解压缩到您的首选位置。

第步:创建实体类

接下来,我们需要创建一个实体类来表示我们的数据模型。在此示例中,我们将创建一个“Product”实体类。

  • 右键单击“com.boot”包并在其中创建一个名为实体的包。
  • 在“entity”包中输入“Product”作为类名,然后单击“Finish”按钮。
  • 在“Product”类中,添加以下代码:
代码语言:javascript复制
@Entity
@Table(name = "product") 
public class Product { 

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) 
	private Long id; 

	@Column(nullable = false) 
	private String name; 

	@Column(nullable = false) 
	private double price; 

	@Column(nullable = false) 
	private int quantity; 
}

@Entity注释指定此类是一个实体并且应该映射到数据库表。@Table注释指定将存储该实体实例的数据库表名称。@Id注解指定实体的主键,而@GenerateValue注解指定主键应自动生成。

第4步:创建存储库接口

现在,我们需要创建一个存储库接口来处理“Product”实体的数据库操作。

  • 右键单击“com.boot”包并创建一个名为repository/repo 的包。
  • 在包存储库/存储库中输入“ProductRepository”作为接口名称,然后单击“完成”按钮。
  • 在“ProductRepository”界面中添加以下代码:
代码语言:javascript复制
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {}

@Repository注解指定该接口是一个存储库,Spring会自动创建它的实例。JpaRepository 接口提供了一组对“Product”实体执行 CRUD(创建、读取、更新、删除)操作的方法。

第 5 步:创建服务类

接下来,我们需要创建一个服务类来处理 REST API 的业务逻辑。

  • 右键单击“com. boot”包并创建另一个名为 Service 的包。
  • 输入“ProductService”作为服务包中的类名,然后单击“完成”按钮。
  • 在“ProductService”类中,添加以下代码:
代码语言:javascript复制
package com.boot.service; 

@Service
public class ProductService { 
	private final ProductRepository productRepository; 

	public ProductService( 
		ProductRepository productRepository) 
	{ 
		this.productRepository = productRepository; 
	} 
}

为了将产品保存在数据库中,我们将使用以下代码:

代码语言:javascript复制
public ResponseEntity<Product> saveProduct(@RequestBody Product product) 
{ 
	Product newProduct = productRepository.save(product); 
	return ResponseEntity.ok(newProduct); 
}

为了从数据库中获取所有产品,我们将使用以下代码:

代码语言:javascript复制
// 获取所有的商品
public ResponseEntity<List<Product> > fetchAllProducts() 
{ 
	return ResponseEntity.ok(productRepository.findAll()); 
}

为了从数据库中获取单个产品,我们将使用以下代码:

代码语言:javascript复制
// 获取一个商品
public ResponseEntity<Optional<Product> > 
fetchProductById(Long id) 
{ 
	Optional<Product> product 
		= productRepository.findById(id); 
	if (product.isPresent()) { 
		return ResponseEntity.ok(product); 
	} 
	else { 
		return ResponseEntity.notFound().build(); 
	} 
}

为了从数据库更新单个产品,我们将使用以下代码:

代码语言:javascript复制
public ResponseEntity<Product> updateProduct(Long id, Product updatedProduct) 
{ 
	if (id == null) { 
		throw new IllegalArgumentException( 
			"ID cannot be null"); 
	} 
	Product Existingproduct 
		= productRepository.findById(id).orElseThrow( 
			() 
				-> new EntityNotFoundException( 
					String.valueOf(id))); 
	Existingproduct.setName(updatedProduct.getName()); 
	Existingproduct.setPrice(updatedProduct.getPrice()); 
	Existingproduct.setQuantity( 
		updatedProduct.getQuantity()); 
	Product savedEntity 
		= productRepository.save(Existingproduct); 
	return ResponseEntity.ok(savedEntity); 
}

要从数据库中删除单个产品,我们将使用以下代码:

代码语言:javascript复制
public ResponseEntity<String> deleteProduct(Long id) 
{ 
	productRepository.deleteById(id); 
	return ResponseEntity.ok( 
		"Product Deleted Successfully"); 
}

第6步:创建控制器类

接下来,我们需要创建一个控制器类来处理 REST API 的 HTTP 请求。

  • 右键单击“com. boot”包并创建另一个名为controller的包。
  • 输入“ProductController”作为控制器包中的类名,然后单击“完成”按钮。
  • 在“ProductController”类中,添加以下代码:
代码语言:javascript复制
@RestController
@RequestMapping("/api/v1") 
public class ProductController { 

	private final ProductService productService; 

	public ProductController(ProductService productService) 
	{ 
		this.productService = productService; 
	} 
}

@RestController注解指定此类是 RESTful API 请求的控制器@RequestMapping注释指定此控制器处理的所有请求基本 URL。

接下来,我们需要添加处理 HTTP 请求的方法。在此示例中,我们将添加方法来处理 GET、POST、PUT 和 DELETE 请求。

对于 Post 请求,我们将使用以下代码:

代码语言:javascript复制
// 创建新的商品
@PostMapping("/product") 
public ResponseEntity<Product> saveProduct(@RequestBody Product product) 
{ 
	Product newProduct = productRepository.save(product); 
	return ResponseEntity.ok(newProduct); 
}

@PostMapping注解用于指示此类将处理 HTTP Post 请求并以 JSON 形式返回响应它用于将 /api/v1/products 路径映射到此类。@RequestBody是 Spring Framework 中的一个注释,用于将 HTTP 请求正文绑定到控制器方法中的参数。当客户端发送 HTTP POST 或 PUT 请求时,它可能会在请求正文中包含数据。此数据通常采用 JSON 或 XML 格式,包含有关正在创建或更新的资源的信息。

对于获取请求所有产品,我们将使用以下代码:

代码语言:javascript复制
// 请求所有产品
@GetMapping("/products") 
public List<Product> getAllProducts() 
{ 
	return productService.getAllProducts(); 
}

@PathVariable注释用于从 HTTP 请求的 URL 路径中提取数据。它用于捕获 URL 的动态段并将它们映射到 Spring Boot 控制器中的方法参数。getProductById() 方法用于通过 id 获取产品,路径为 /products/{id}。

对于更新请求,我们将使用以下代码:

代码语言:javascript复制
// 更新请求
@PutMapping(path = "/products/{productId}") 
public ResponseEntity<Product> updateProduct(@PathVariable(value = "productId") 
			Long productId, @RequestBody Product product) 
{ 
	return productService.updateProduct(productId, product); 
}

在此示例中,我们为 updateProduct() 方法添加了@PutMapping注释。@PutMapping注释用于将 HTTP PUT 请求映射到 /product/{id} 端点,其中 {id} 是产品 ID 的路径变量。@RequestBody注解用于将请求体绑定到方法中的产品参数。当向 /api/v1/product/{id} 发出 PUT 请求时,将执行 updateProduct() 方法,并将 id 参数设置为来自 URL 路径和产品的产品 ID。

对于删除请求,我们将使用以下代码:

代码语言:javascript复制
// 删除商品
@DeleteMapping(value = "/products/{productId}") 
public String deleteProduct(@PathVariable Long productId) 
{ 
	productService.deleteProduct(productId); 
	return "Product Deleted Successfully against id "
		  productId   " "; 
}

现在,我们已经完成了编程方面的工作,剩下的只是数据库,然后测试端点,然后我们就完成了。首先,我们必须在application.properties文件中配置 MySql。我们将在application.properties文件中添加以下代码

代码语言:javascript复制
spring.datasource.url=jdbc:mysql://localhost:3306/name of your database 
spring.datasource.username=your username for mysql 
spring.datasource.password=your password for mysql 
spring.jpa.hibernate.ddl-auto=create-drop

在 application.properties 文件内

在本例中,端口为 8080。在本例中,对于我们的 Post 请求,端点将类似于 `http://localhost:8080/api/v1/product`

对于我们的获取请求,端点将类似于“ http://localhost:8080/api/v1/products ”,输出为:

对于我们的 Get By Id 请求,端点将类似于“ http://localhost:8080/api/v1/products/id ”,输出为:

对于我们的更新请求,端点将类似于 `http://localhost:8080/api/v1/products/id

最后,对于我们的删除请求,端点将类似于 http://localhost:8080/api/v1/products/id ,输出为:

我们在 Spring Boot 中制作了 Rest API。

0 人点赞