小白如何使用 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”类中,添加以下代码:
@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”界面中添加以下代码:
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {}
@Repository注解指定该接口是一个存储库,Spring会自动创建它的实例。JpaRepository 接口提供了一组对“Product”实体执行 CRUD(创建、读取、更新、删除)操作的方法。
第 5 步:创建服务类
接下来,我们需要创建一个服务类来处理 REST API 的业务逻辑。
- 右键单击“com. boot”包并创建另一个名为 Service 的包。
- 输入“ProductService”作为服务包中的类名,然后单击“完成”按钮。
- 在“ProductService”类中,添加以下代码:
package com.boot.service;
@Service
public class ProductService {
private final ProductRepository productRepository;
public ProductService(
ProductRepository productRepository)
{
this.productRepository = productRepository;
}
}
为了将产品保存在数据库中,我们将使用以下代码:
public ResponseEntity<Product> saveProduct(@RequestBody Product product)
{
Product newProduct = productRepository.save(product);
return ResponseEntity.ok(newProduct);
}
为了从数据库中获取所有产品,我们将使用以下代码:
// 获取所有的商品
public ResponseEntity<List<Product> > fetchAllProducts()
{
return ResponseEntity.ok(productRepository.findAll());
}
为了从数据库中获取单个产品,我们将使用以下代码:
// 获取一个商品
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();
}
}
为了从数据库更新单个产品,我们将使用以下代码:
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);
}
要从数据库中删除单个产品,我们将使用以下代码:
public ResponseEntity<String> deleteProduct(Long id)
{
productRepository.deleteById(id);
return ResponseEntity.ok(
"Product Deleted Successfully");
}
第6步:创建控制器类
接下来,我们需要创建一个控制器类来处理 REST API 的 HTTP 请求。
- 右键单击“com. boot”包并创建另一个名为controller的包。
- 输入“ProductController”作为控制器包中的类名,然后单击“完成”按钮。
- 在“ProductController”类中,添加以下代码:
@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 请求,我们将使用以下代码:
// 创建新的商品
@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 格式,包含有关正在创建或更新的资源的信息。
对于获取请求所有产品,我们将使用以下代码:
// 请求所有产品
@GetMapping("/products")
public List<Product> getAllProducts()
{
return productService.getAllProducts();
}
@PathVariable注释用于从 HTTP 请求的 URL 路径中提取数据。它用于捕获 URL 的动态段并将它们映射到 Spring Boot 控制器中的方法参数。getProductById() 方法用于通过 id 获取产品,路径为 /products/{id}。
对于更新请求,我们将使用以下代码:
// 更新请求
@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。
对于删除请求,我们将使用以下代码:
// 删除商品
@DeleteMapping(value = "/products/{productId}")
public String deleteProduct(@PathVariable Long productId)
{
productService.deleteProduct(productId);
return "Product Deleted Successfully against id "
+ productId + " ";
}
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。