本文目录导读:

我来为您创建一个完整的Spring Boot入门案例,包含基本配置和REST API示例。
项目结构
spring-boot-demo
├── pom.xml
├── src/main/java/com/example/demo/
│ ├── DemoApplication.java
│ ├── controller/
│ │ └── HelloController.java
│ ├── entity/
│ │ └── User.java
│ └── service/
│ └── UserService.java
└── src/main/resources/
└── application.yml
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 继承Spring Boot父项目 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0</version>
<name>spring-boot-demo</name>
<description>Spring Boot入门案例</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!-- Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Lombok 简化代码 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Boot DevTools 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
主应用程序类
DemoApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Spring Boot启动类
* @SpringBootApplication 是一个组合注解,包含:
* - @SpringBootConfiguration:配置类
* - @EnableAutoConfiguration:自动配置
* - @ComponentScan:组件扫描
*/
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
// 启动Spring Boot应用
SpringApplication.run(DemoApplication.class, args);
System.out.println("Spring Boot应用启动成功!");
}
}
实体类
User.java
package com.example.demo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 用户实体类
* 使用Lombok简化getter/setter方法
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
控制器
HelloController.java - 基础控制器
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 基础Hello World控制器
*/
@RestController
@RequestMapping("/api")
public class HelloController {
/**
* 基础问候方法
* GET /api/hello
*/
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
/**
* 带参数的问候
* GET /api/hello?name=张三
*/
@GetMapping("/hello/param")
public String helloWithParam(@RequestParam(value = "name", defaultValue = "World") String name) {
return "Hello, " + name + "!";
}
/**
* 路径参数
* GET /api/hello/张三
*/
@GetMapping("/hello/{name}")
public String helloWithPath(@PathVariable String name) {
return "Hello, " + name + " from path!";
}
}
UserController.java - 用户管理控制器
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 用户管理控制器
*/
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
/**
* 获取所有用户
* GET /api/users
*/
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
/**
* 根据ID获取用户
* GET /api/users/{id}
*/
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
/**
* 创建用户
* POST /api/users
*/
@PostMapping
public User createUser(@RequestBody User user) {
return userService.createUser(user);
}
/**
* 更新用户
* PUT /api/users/{id}
*/
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
return userService.updateUser(id, user);
}
/**
* 删除用户
* DELETE /api/users/{id}
*/
@DeleteMapping("/{id}")
public Map<String, String> deleteUser(@PathVariable Long id) {
return userService.deleteUser(id);
}
}
服务层
UserService.java
package com.example.demo.service;
import com.example.demo.entity.User;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
/**
* 用户服务类
*/
@Service
public class UserService {
// 使用内存存储数据(示例)
private final Map<Long, User> userStore = new ConcurrentHashMap<>();
private final AtomicLong idGenerator = new AtomicLong(1);
/**
* 获取所有用户
*/
public List<User> getAllUsers() {
return new ArrayList<>(userStore.values());
}
/**
* 根据ID获取用户
*/
public User getUserById(Long id) {
return userStore.get(id);
}
/**
* 创建用户
*/
public User createUser(User user) {
Long id = idGenerator.getAndIncrement();
user.setId(id);
userStore.put(id, user);
return user;
}
/**
* 更新用户
*/
public User updateUser(Long id, User user) {
if (userStore.containsKey(id)) {
user.setId(id);
userStore.put(id, user);
return user;
}
throw new RuntimeException("用户不存在");
}
/**
* 删除用户
*/
public Map<String, String> deleteUser(Long id) {
userStore.remove(id);
Map<String, String> result = new HashMap<>();
result.put("message", "用户删除成功");
return result;
}
}
配置文件
application.yml
# 应用配置
server:
port: 8080 # 服务器端口
servlet:
context-path: / # 上下文路径
spring:
application:
name: spring-boot-demo # 应用名称
# 开发环境配置
devtools:
remote:
restart:
enabled: true # 启用热部署
# 日志配置
logging:
level:
root: INFO # 根日志级别
com.example.demo: DEBUG # 应用日志级别
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n" # 控制台日志格式
# 自定义配置
app:
version: 1.0.0
author: Jason
测试类
DemoApplicationTests.java
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests {
@Test
void contextLoads() {
// 测试应用程序上下文加载
}
}
HelloControllerTest.java
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.ResponseEntity;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HelloControllerTest {
@LocalServerPort
private int port;
@Autowired
private TestRestTemplate restTemplate;
@Test
public void testHello() {
ResponseEntity<String> response = restTemplate
.getForEntity("http://localhost:" + port + "/api/hello", String.class);
assert response.getStatusCode().is2xxSuccessful();
assert response.getBody().equals("Hello, Spring Boot!");
}
}
运行和测试
运行方式
-
IDE运行:在IDE中直接运行
DemoApplication类的main方法 -
命令行运行:
# Maven方式 mvn spring-boot:run # 或打包后运行 mvn clean package java -jar target/spring-boot-demo-1.0.0.jar
测试API
启动后访问以下地址测试:
http://localhost:8080/api/hello- 基础问候http://localhost:8080/api/hello?name=张三- 带参数http://localhost:8080/api/users- 获取所有用户POST http://localhost:8080/api/users- 创建用户
curl测试命令
# 测试hello接口
curl http://localhost:8080/api/hello
# 创建用户
curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{"name":"张三","age":25,"email":"zhangsan@example.com"}'
# 获取用户列表
curl http://localhost:8080/api/users
关键点说明
- @SpringBootApplication:组合注解,包含自动配置和组件扫描
- REST Controller:使用
@RestController处理HTTP请求 - 依赖注入:使用
@Autowired自动装配 - Lombok:简化POJO代码
- 统一配置文件:使用application.yml集中配置
- 自动配置:Spring Boot根据依赖自动配置
这个入门案例包含了Spring Boot的核心概念,可以作为学习的基础,您可以根据需求继续扩展,如添加数据库、安全认证、微服务等功能。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播