前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用 Spring Boot 创建 REST API ?

如何使用 Spring Boot 创建 REST API ?

作者头像
用户1418987
发布2023-10-26 14:20:36
6380
发布2023-10-26 14:20:36
举报
文章被收录于专栏:coder
如何使用 Spring Boot 创建 REST API ?_HTTP
如何使用 Spring Boot 创建 REST API ?_HTTP

如何使用 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。

如何使用 Spring Boot 创建 REST API ?_spring_02
如何使用 Spring Boot 创建 REST API ?_spring_02
设置以下选项
  • 项目: 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`

如何使用 Spring Boot 创建 REST API ?_HTTP_03
如何使用 Spring Boot 创建 REST API ?_HTTP_03

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

如何使用 Spring Boot 创建 REST API ?_spring_04
如何使用 Spring Boot 创建 REST API ?_spring_04

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

如何使用 Spring Boot 创建 REST API ?_spring_05
如何使用 Spring Boot 创建 REST API ?_spring_05

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

如何使用 Spring Boot 创建 REST API ?_API_06
如何使用 Spring Boot 创建 REST API ?_API_06

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

如何使用 Spring Boot 创建 REST API ?_API_07
如何使用 Spring Boot 创建 REST API ?_API_07

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何使用 Spring Boot 创建 REST API ?
    • 逐步实施
      • 第1步:搭建开发环境
        • 第2步:创建Spring Boot项目
          • 设置以下选项
        • 第步:创建实体类
          • 第4步:创建存储库接口
            • 第 5 步:创建服务类
              • 第6步:创建控制器类
              相关产品与服务
              云数据库 MySQL
              腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档