簡單Backend Spring boot 開發並公開 REST API
1.實作連結Database (H2/Mysql)
2.使用初始化數據腳本方式,初始測試資料
使用 Spring Initializr 建立 Spring Boot 項目
新增 Maven 依賴項
備註: Lombok 一個 Java 函式庫,只需一個註解。從此告別編寫 getter 或 equals 方法的繁瑣,您的類別就擁有了功能齊全的構建器,像setter、getter、logger…等等
可參考官網 https://projectlombok.org/
完整目錄
以下為此專案相關代碼
建立 JPA Entity
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "users")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username", nullable = false)
private String username;
@Column(name = "password", nullable = false)
private String password;
@Column(name = "first_name", nullable = false)
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email", nullable = false, unique = true)
private String email;
}
建立 Spring Data JPA Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
建立 Spring Controller REST API - /api/users
@RestController
@RequestMapping("/api")
// 參考 探 CORS (Cross-Origin Resource Sharing,跨來源資源共享) 問題 文章
@CrossOrigin(origins = "http://localhost:8080")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/users")
public List<User> fetchUsers(){
return userRepository.findAll();
}
}
修改 Spring Boot 應用程式設定檔 - JPA配置與屬性
application.yaml (此處以H2 為 DB,如果要用mysql 記得切換相關設定)
server:
port: 8088
spring:
application:
name: springboot-backend
devtools:
restart:
enabled: true
datasource:
# the configuration for the H2 database
url: jdbc:h2:mem:testdb
username: sa
password: 123456
driverClassName: org.h2.Driver
# the configuration for the MySQL database
# url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
# driverClassName: com.mysql.cj.jdbc.Driver
# username: mysql
# password: 123456
jpa:
show-sql: true
generate-ddl: true
defer-datasource-initialization: true #延遲數據源初始化
database-platform: org.hibernate.dialect.H2Dialect
# database-platform: org.hibernate.dialect.MySQLDialect
hibernate:
ddl-auto: create-drop
# 初始化數據腳本
sql:
init:
schema-locations: classpath:schema-h2.sql
data-locations: classpath:data.sql
encoding: utf-8
mode: ALWAYS
使用基本 SQL 腳本初始化資料庫,測試使用
將檔案存放在 /src/main/resources 目錄徑
schema-h2.sql
DROP TABLE IF EXISTS users;
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
email VARCHAR(255) NOT NULL,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) DEFAULT NULL,
password VARCHAR(255) NOT NULL,
username VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
CONSTRAINT email_unique_users UNIQUE (email)
);
data.sql
INSERT INTO users (email, first_name, last_name, password, username) VALUES ('danny@example.com','danny','yu','123456','dannyu');
INSERT INTO users (email, first_name, last_name, password, username) VALUES ('tom@example.com','tom','wu','123456','tomwu');
INSERT INTO users (email, first_name, last_name, password, username) VALUES ('joy@example.com','joy','cheng','123456','joycheng');
INSERT INTO users (email, first_name, last_name, password, username) VALUES ('jack@example.com','jack','wang','123456','jackwang');
編譯專案
danny@Danny-Yu springboot-backend % mvn clean install -Dmaven.test.skip=true
…
…
[INFO] -------------------< com.dannyyu:springboot-backend >-------------------
[INFO] Building springboot-backend 0.0.1-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
…
…
[INFO] --- install:3.1.4:install (default-install) @ springboot-backend ---
[INFO] Installing /Users/danny/Desktop/projects/springboot-backend/pom.xml to /Users/danny/.m2/repository/com/dannyyu/springboot-backend/0.0.1-SNAPSHOT/springboot-backend-0.0.1-SNAPSHOT.pom
[INFO] Installing /Users/danny/Desktop/projects/springboot-backend/target/springboot-backend-0.0.1-SNAPSHOT.jar to /Users/danny/.m2/repository/com/dannyyu/springboot-backend/0.0.1-SNAPSHOT/springboot-backend-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.367 s
[INFO] Finished at: 2025-11-29T16:20:11+08:00
[INFO] ------------------------------------------------------------------------
danny@Danny-Yu springboot-backend %
使用 maven 運行 App
danny@Danny-Yu springboot-backend % mvn exec:java -Dexec.mainClass="com.dannyyu.backend.SpringbootBackendApplication"
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
…
…
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.5.8)
2025-11-29T17:20:50.300+08:00 INFO 4508 --- [springboot-backend] [lication.main()] c.d.b.SpringbootBackendApplication : Starting SpringbootBackendApplication using Java 25.0.1 with PID 4508 (/Users/danny/Desktop/projects/springboot-backend/target/classes started by danny in /Users/danny/Desktop/projects/springboot-backend)
…
…
2025-11-29T17:20:51.728+08:00 INFO 4508 --- [springboot-backend] [lication.main()] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8088 (http) with context path '/'
2025-11-29T17:20:51.747+08:00 INFO 4508 --- [springboot-backend] [lication.main()] c.d.b.SpringbootBackendApplication : Started SpringbootBackendApplication in 1.619 seconds (process running for 3.566)
最後,測試,是否如預期執行正確
Postman 測試工具
使用 API 測試工具開發,Postman 是一個可以模擬 HTTP Request 的工具(包含HTTP 請求方法 get、post、delete、put),能夠快速測試您的 API 是否能正常的請求資料,得到正確的請求結果
Postman 的官方下載網站: https://www.postman.com/downloads/
Postman 測試呼叫API 查詢 User 資料 http://localhost:8088/api/users
留言