Spring MVC 与 RESTful API:打造现代 Web 服务!

举报
bug菌 发表于 2025/01/25 23:33:58 2025/01/25
【摘要】 🏆本文收录于「滚雪球学SpringBoot」专栏,手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!@TOC环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8 前言 📜朋友们,你们好!今天,我们要深入探讨一个非常重要且强大的技术——S...

🏆本文收录于「滚雪球学SpringBoot」专栏,手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

@TOC

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言 📜

朋友们,你们好!今天,我们要深入探讨一个非常重要且强大的技术——Spring MVCRESTful API。在 Web 开发中,Spring MVC 是一个被广泛使用的框架,而 RESTful API 则是目前最流行的一种接口设计风格。这两者结合起来,不仅能够帮助我们快速构建现代的 Web 服务,还能提高系统的扩展性、可维护性。

你是否曾经对创建 Web 服务感到困惑,尤其是当涉及到如何设计清晰、易于维护的 API 时?别担心,今天的教程会带你一起搭建一个 Spring MVC + RESTful API 服务,从基础配置开始,一步步地构建一个符合现代 Web 标准的 API。

这篇文章不单纯讲解基础的配置和注解,我们还将深入探讨一些实践技巧,帮助你在实际开发中高效地运用这些技术。🎉


🛠️ 1. 配置 Spring MVC

要在 Spring Boot 中使用 Spring MVC,首先需要创建一个基本的 Spring Boot 项目并进行配置。Spring Boot 本身已经为我们提供了大量的自动配置选项,但为了完全掌握其使用,了解一些配置细节会让你更有信心应对不同的场景。

1.1 创建 Spring Boot 项目

创建 Spring Boot 项目的步骤与之前类似。我们通过 Spring Initializr 来生成基础框架。

  1. 打开 Spring Initializr
  2. 配置项目:
    • Project: Maven Project
    • Language: Java
    • Spring Boot: 选择最新的稳定版
    • Project Metadata
      • Group: com.example
      • Artifact: springmvc-restful
      • Name: SpringMVCRestful
      • Description: Spring MVC with RESTful API
      • Package name: com.example.springmvcrestful
    • Dependencies
      • Spring Web(Web开发所需,含 RESTful 支持)
  3. 点击 Generate 下载并解压项目。

1.2 Spring MVC 配置

在 Spring Boot 中,Spring MVC 的配置通常非常简单。Spring Boot 默认开启了 DispatcherServlet,这意味着我们无需配置复杂的 Servlet 和过滤器。

但是,如果你想进一步定制化一些行为,比如配置视图解析器或自定义一些拦截器,你可以通过 application.propertiesJavaConfig 来进行设置。

# application.properties 配置文件
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

这种配置方式非常适合传统的 JSP 应用,但在构建 RESTful API 时,我们通常不需要视图解析器,所有返回的数据都会是 JSON 格式,直接返回即可。


🧩 2. 创建 RESTful 风格的 Web 服务

RESTful API 基于 HTTP 协议,利用不同的 HTTP 方法(GET、POST、PUT、DELETE)来执行不同的操作,资源通过 URL 进行标识,数据通过 JSON 或 XML 传输。在这个部分,我们将通过 Spring MVC 创建一个简单的 RESTful 风格的 Web 服务。

2.1 创建 REST 控制器

首先,我们创建一个用户控制器类,用于处理不同的 RESTful 请求。

package com.example.springmvcrestful;

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.RestController;

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

    // 获取所有用户
    @GetMapping
    public String getAllUsers() {
        return "Returning all users!";
    }

    // 根据 ID 获取用户
    @GetMapping("/{id}")
    public String getUserById(@PathVariable String id) {
        return "Returning user with ID: " + id;
    }
}

2.2 代码解析

  • @RestController:这意味着 Spring 会将该类的返回值直接作为响应体返回,而不是视图。它是 @Controller@ResponseBody 的组合。
  • @RequestMapping("/api/users"):这是控制器类的基础路径,所以所有与 /api/users 相关的请求都会通过这个类来处理。
  • @GetMapping:用来处理 HTTP GET 请求,获取资源。
  • @PathVariable:这是用来提取 URL 路径中的变量,例如 /{id}

2.3 完善 RESTful 控制器

现在,我们让这个控制器变得更强大一点,加入更多的 RESTful 功能,比如创建用户、更新用户和删除用户。

package com.example.springmvcrestful;

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/products")
public class ProductController {

    // 获取所有产品
    @GetMapping
    public String getAllProducts() {
        return "Returning all products!";
    }

    // 获取指定 ID 的产品
    @GetMapping("/{id}")
    public String getProductById(@PathVariable Long id) {
        return "Returning product with ID: " + id;
    }

    // 创建新产品
    @PostMapping
    public String createProduct(@RequestBody String product) {
        return "Product created: " + product;
    }

    // 更新产品
    @PutMapping("/{id}")
    public String updateProduct(@PathVariable Long id, @RequestBody String product) {
        return "Product with ID " + id + " updated to: " + product;
    }

    // 删除产品
    @DeleteMapping("/{id}")
    public String deleteProduct(@PathVariable Long id) {
        return "Product with ID " + id + " deleted";
    }
}

2.4 代码解析

  • @PostMapping:处理 POST 请求,通常用于创建资源。
  • @PutMapping:处理 PUT 请求,用于更新资源。
  • @DeleteMapping:处理 DELETE 请求,用于删除资源。
  • @RequestBody:从请求体中获取数据并将其转换为 Java 对象。对于 JSON 格式的请求体,Spring 会自动将其转换为相应的对象。

🚀 3. 运行和测试 API

3.1 启动 Spring Boot 应用

启动 Spring Boot 应用的方法与我们之前创建的应用类似。只需要运行 DemoApplication.java(包含 @SpringBootApplication 注解的启动类)即可启动应用。

3.2 测试 API

启动应用后,你可以通过浏览器、Postman 或 curl 工具来测试 RESTful API。

  • GET 请求 获取所有产品:

    GET http://localhost:8080/api/products
    
  • GET 请求 获取指定产品:

    GET http://localhost:8080/api/products/1
    
  • POST 请求 创建新产品:

    POST http://localhost:8080/api/products
    Request body: {"name": "New Product"}
    
  • PUT 请求 更新产品:

    PUT http://localhost:8080/api/products/1
    Request body: {"name": "Updated Product"}
    
  • DELETE 请求 删除产品:

    DELETE http://localhost:8080/api/products/1
    

📊 4. @RequestMapping 和 @RestController 的深度解析

4.1 @RequestMapping 注解

@RequestMapping 注解是 Spring MVC 中最常用的注解之一,用于将 HTTP 请求映射到控制器方法。它可以处理所有的 HTTP 方法,包括 GET、POST、PUT 和 DELETE 等。但在实践中,我们通常使用更简洁的 @GetMapping@PostMapping@PutMapping@DeleteMapping 来进行方法映射,这样代码更加清晰和符合 RESTful 风格。

4.2 @RestController 的优势

@RestController 是一个组合注解,它结合了 @Controller@ResponseBody,意味着该控制器的返回值会被直接写入 HTTP 响应体中,而不是通过视图解析器来解析。使用 @RestController 非常适合构建 API,因为它默认返回 JSON 格式的数据。


🏁 总结 🎯

通过今天的教程,你应该已经掌握了如何配置和使用 Spring MVC 来构建一个 RESTful 风格的 Web 服务。Spring MVC 提供的强大注解和自动配置机制,使得创建符合现代 Web 服务标准的 API 变得非常简单。

RESTful API 是目前开发中最常用的接口设计风格,它遵循简洁、易懂和高效的原则。而通过 Spring MVC,我们可以非常轻松地实现 RESTful 风格的接口,不仅支持常见的 HTTP 方法,还能方便地处理 JSON 数据。

现在,轮到你发挥创意,利用 Spring MVC 和 RESTful API 来构建你自己的 Web 应用了!🚀

🧧福利赠与你🧧

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。

最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

✨️ Who am I?

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。