从零搭建一个基于Spring Boot的RESTful API服务
curl -X POST -H "Content-Type: application/json" -d '{"username":"张三","email":"zhangsan@example.com"}' http://localhost:8080/api/users。2.Postman:发送HTTP请求(如POST http://localhost:8080/api/users,请求体为JSON
在后端开发中,RESTful API是构建服务的常用方式,而Spring Boot凭借其“约定优于配置”的特性,能快速实现接口开发。本文将带大家从零开始,用Spring Boot搭建一个简单的用户管理RESTful API,包含基本的CRUD操作,并集成Swagger用于接口文档生成。
一、环境准备
在开始前,确保本地已安装以下工具:
• JDK 1.8+(推荐JDK 11)
• Maven 3.6+(或Gradle)
• IDE(IntelliJ IDEA或Eclipse,本文以IDEA为例)
• MySQL 5.7+(用于数据存储)
二、初始化Spring Boot项目
1. 通过Spring Initializr创建项目
访问 Spring Initializr,填写项目信息:
◦ Project:Maven
◦ Language:Java
◦ Spring Boot:2.7.0(稳定版)
◦ Group:com.example
◦ Artifact:user-api
◦ Dependencies:勾选 Spring Web、Spring Data JPA、MySQL Driver、Springdoc OpenAPI UI(用于Swagger文档)。
2. 导入项目到IDE
下载项目后,用IDEA打开pom.xml,等待Maven依赖下载完成。
三、配置数据库连接
在src/main/resources/application.yml中配置MySQL连接信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update # 自动创建表结构(开发环境用)
show-sql: true # 打印SQL语句
properties:
hibernate:
format_sql: true # 格式化SQL
注意:需提前在MySQL中创建数据库user_db(CREATE DATABASE user_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;)。
四、实现核心功能(CRUD)
1. 定义实体类(Entity)
创建com.example.userapi.entity.User类,映射数据库表:
package com.example.userapi.entity;
import javax.persistence.*;
import lombok.Data;
@Data
@Entity
@Table(name = "t_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 50)
private String username;
@Column(nullable = false, length = 100)
private String email;
@Column(name = "create_time")
private LocalDateTime createTime;
}
说明:
• @Data(Lombok注解)自动生成getter、setter等方法,需在pom.xml中添加Lombok依赖。
• @Entity声明为JPA实体,@Table指定数据库表名。
• @GeneratedValue设置主键自增策略。
2. 定义数据访问层(Repository)
创建com.example.userapi.repository.UserRepository接口,继承JpaRepository:
package com.example.userapi.repository;
import com.example.userapi.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
// JPA自动实现基本CRUD,如需自定义查询,可添加方法(如根据用户名查询)
User findByUsername(String username);
}
3. 定义服务层(Service)
创建com.example.userapi.service.UserService接口及实现类:
// 接口
package com.example.userapi.service;
import com.example.userapi.entity.User;
import java.util.List;
public interface UserService {
User save(User user); // 新增/修改用户
User getById(Long id); // 根据ID查询
List<User> getAll(); // 查询所有
void deleteById(Long id); // 根据ID删除
}
// 实现类
package com.example.userapi.service.impl;
import com.example.userapi.entity.User;
import com.example.userapi.repository.UserRepository;
import com.example.userapi.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User save(User user) {
if (user.getId() == null) {
user.setCreateTime(LocalDateTime.now()); // 新增时设置创建时间
}
return userRepository.save(user);
}
@Override
public User getById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("用户不存在"));
}
@Override
public List<User> getAll() {
return userRepository.findAll();
}
@Override
public void deleteById(Long id) {
userRepository.deleteById(id);
}
}
4. 定义控制器(Controller)
创建com.example.userapi.controller.UserController,实现RESTful接口:
package com.example.userapi.controller;
import com.example.userapi.entity.User;
import com.example.userapi.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/users")
@Tag(name = "用户管理接口", description = "提供用户的CRUD操作")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
@Operation(summary = "新增用户")
public ResponseEntity<User> save(@RequestBody User user) {
return ResponseEntity.ok(userService.save(user));
}
@GetMapping("/{id}")
@Operation(summary = "根据ID查询用户")
public ResponseEntity<User> getById(@PathVariable Long id) {
return ResponseEntity.ok(userService.getById(id));
}
@GetMapping
@Operation(summary = "查询所有用户")
public ResponseEntity<List<User>> getAll() {
return ResponseEntity.ok(userService.getAll());
}
@DeleteMapping("/{id}")
@Operation(summary = "根据ID删除用户")
public ResponseEntity<Void> deleteById(@PathVariable Long id) {
userService.deleteById(id);
return ResponseEntity.noContent().build();
}
}
五、集成Swagger接口文档
Springdoc OpenAPI会自动生成接口文档,无需额外配置。启动项目后,访问:
http://localhost:8080/swagger-ui.html
即可看到可视化的接口文档,支持在线调试(如发送POST请求新增用户)。
六、测试接口
可通过以下方式测试接口:
1. Swagger页面:在页面中选择接口,填写参数后点击“Execute”。
2. Postman:发送HTTP请求(如POST http://localhost:8080/api/users,请求体为JSON:{"username":"test","email":"test@example.com"})。
3. curl命令:
# 新增用户
curl -X POST -H "Content-Type: application/json" -d '{"username":"张三","email":"zhangsan@example.com"}' http://localhost:8080/api/users
# 查询所有用户
curl http://localhost:8080/api/users
七、总结
本文通过Spring Boot快速搭建了一个用户管理RESTful API,包含以下关键点:
• 用Spring Initializr初始化项目,集成Web、JPA、MySQL等依赖;
• 基于JPA实现数据持久化,简化CRUD代码;
• 用Swagger自动生成接口文档,方便调试和对接;
• 遵循RESTful规范设计接口(POST新增、GET查询、DELETE删除等)。
后续可扩展功能:添加请求参数校验、统一异常处理、分页查询等。如果有疑问,欢迎在评论区交流!
更多推荐
所有评论(0)