day2

📌 Day 2:Spring Boot Controller 和基础 API

目标:学习 Spring MVC 控制器 的用法,包括 RESTful API 开发、参数传递、JSON 处理和 API 文档生成。


1️⃣ @RestController vs @Controller

Spring 提供了两种方式来定义 Controller(控制器)

(1)@RestController

@RestController = @Controller + @ResponseBody,用于返回 JSON 数据,常用于 REST API

📌 示例

@RestController
@RequestMapping("/api")
public class HelloRestController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

📌 访问 http://localhost:8080/api/hello,返回文本

Hello, Spring Boot!

(2)@Controller

@Controller 主要用于 MVC 页面渲染,返回 HTML/JSP 视图。

📌 示例

@Controller
@RequestMapping("/view")
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, Spring Boot!");
        return "hello"; // 视图名称,对应 resources/templates/hello.html
    }
}

📌 访问 http://localhost:8080/view/hello,会渲染 hello.html 页面

📌 总结

注解适用场景返回类型
@RestController 开发 RESTful API JSON / String
@Controller 传统 MVC 页面渲染 HTML/JSP 页面

2️⃣ GET / POST / PUT / DELETE 的使用

Spring Boot 提供了 四种常见 HTTP 请求方式

📌 示例 Controller

@RestController
@RequestMapping("/api/user")
public class UserController {

    // GET 请求,查询用户信息
    @GetMapping("/{id}")
    public String getUser(@PathVariable int id) {
        return "User ID: " + id;
    }

    // POST 请求,创建新用户
    @PostMapping
    public String createUser(@RequestBody Map<String, Object> user) {
        return "User Created: " + user.get("name");
    }

    // PUT 请求,更新用户信息
    @PutMapping("/{id}")
    public String updateUser(@PathVariable int id, @RequestBody Map<String, Object> user) {
        return "User ID " + id + " Updated: " + user.get("name");
    }

    // DELETE 请求,删除用户
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable int id) {
        return "User ID " + id + " Deleted";
    }
}

📌 测试 API(使用 Postman / curl / Swagger):

  • GET /api/user/1"User ID: 1"
  • POST /api/user { "name": "Tom" }"User Created: Tom"
  • PUT /api/user/1 { "name": "Jerry" }"User ID 1 Updated: Jerry"
  • DELETE /api/user/1"User ID 1 Deleted"

3️⃣ 参数传递方式

Spring Boot 提供 3 种常见的参数传递方式

(1)@RequestParam 传递查询参数

用于 GET 请求,参数直接跟在 URL 后面。

📌 示例

@RestController
@RequestMapping("/api")
public class ParamController {

    @GetMapping("/greet")
    public String greet(@RequestParam String name) {
        return "Hello, " + name + "!";
    }
}

📌 访问 http://localhost:8080/api/greet?name=Tom

Hello, Tom!

(2)@PathVariable 传递路径参数

用于 RESTful 风格的 URL

📌 示例

@RestController
@RequestMapping("/api")
public class PathVariableController {

    @GetMapping("/user/{id}")
    public String getUser(@PathVariable int id) {
        return "User ID: " + id;
    }
}

📌 访问 http://localhost:8080/api/user/10

User ID: 10

(3)@RequestBody 传递 JSON 数据

用于 POST/PUT 请求,接收 JSON 格式的请求体

📌 示例

@RestController
@RequestMapping("/api")
public class RequestBodyController {

    @PostMapping("/user")
    public String createUser(@RequestBody Map<String, Object> user) {
        return "User Created: " + user.get("name");
    }
}

📌 POST 请求(JSON 数据):

{
    "name": "Alice",
    "age": 25
}

📌 返回:

User Created: Alice

4️⃣ 返回 JSON 数据(FastJSON / Jackson)

Spring Boot 默认使用 Jackson 处理 JSON,但也可以使用 FastJSON

(1)使用 Jackson(默认)

📌 示例

@RestController
@RequestMapping("/api")
public class JsonController {

    @GetMapping("/user")
    public User getUser() {
        return new User(1, "Tom", 25);
    }
}

📌 返回 JSON:

{
    "id": 1,
    "name": "Tom",
    "age": 25
}

(2)使用 FastJSON

第一步:引入 FastJSON 依赖(pom.xml

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

第二步:修改 Controller

import com.alibaba.fastjson.JSON;

@RestController
@RequestMapping("/api")
public class FastJsonController {

    @GetMapping("/user")
    public String getUser() {
        User user = new User(1, "Tom", 25);
        return JSON.toJSONString(user);
    }
}

5️⃣ Swagger3 API 文档集成

Swagger 是 自动生成 API 文档 的工具。

(1)添加依赖

📌 修改 pom.xml

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

(2)配置 Swagger

📌 创建 SwaggerConfig.java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
@EnableOpenApi
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any())
                .build();
    }
}

(3)访问 API 文档

📌 启动项目后,打开 Swagger UI: 👉 http://localhost:8080/swagger-ui/


6️⃣ 练习题

📝 练习 1:创建 /api/sum?a=5&b=10,返回 a+b 的和
📝 练习 2:创建 PUT /api/user/{id},更新用户信息
📝 练习 3:集成 Swagger 并测试 API


✅ 恭喜!你掌握了 Spring Boot API 开发!🎉
📌 明天(Day 3)学习 Spring Boot 数据库 MyBatis!

posted @ 2025-03-09 10:23  crawlerWPS  阅读(29)  评论(0)    收藏  举报