当前位置: 首页 > news >正文

Java-Spring 入门指南(十六)SpringMVC--RestFul 风格

Java-Spring 入门指南(十六)SpringMVC--RestFul 风格

  • 前言
  • 一、RestFul风格是什么
    • (1)传统URL与RestFul URL对比
    • (2)核心特征
  • 二、RestFul 有什么用,功能是什么,优点是什么
    • 1. 核心功能
    • 2. 核心优点
  • 三、RestFul 怎么使用
    • 1. 环境准备
    • 2. 核心代码实现与解析
    • 3. 核心代码讲解
      • (1). 类注解:@RestController
      • (2). HTTP方法注解@GetMapping/@PostMapping/@PutMapping/@DeleteMapping
        • 2.1 @GetMapping("/a")
        • 2.2 @PostMapping("/a")
        • 2.3 @PutMapping("/a")
        • 2.4 @DeleteMapping("/a")
      • (3). 路径参数接收:@PathVariable
      • (4). 请求体参数接收:@RequestBody
    • 4. 代码核心逻辑解释
    • 3. 项目运行与功能测试
      • 分场景测试(附操作步骤)

前言

  • 在上一篇博客中,我们掌握了SpringMVC注解开发的核心,用@Controller@RequestMapping简化了请求映射与参数接收,但实际开发中,API设计还需要更规范的风格——RestFul风格
  • RestFul不是技术,而是一种基于HTTP协议的API设计规范,它以“资源”为核心,通过URL描述资源、HTTP方法定义操作(如GET查询、POST新增),能让接口更简洁、语义更清晰,是前后端分离项目的首选方案。
  • 本文将基于上一篇的Maven+IDEA+Tomcat 11环境,从RestFul的定义入手,拆解其核心作用与优点

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-Spring入门指南知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13040333.html?spm=1001.2014.3001.5482

在这里插入图片描述


上一篇博客地址
https://blog.csdn.net/2402_83322742/article/details/152269419

一、RestFul风格是什么

RestFul全称为Representational State Transfer(表述性状态转移),是2000年提出的API设计规范,核心是“以资源为中心”,用HTTP协议的特性来定义接口的操作逻辑,而非通过URL中的“动词”(如getUseraddUser)区分功能。

简单来说,传统URL是“描述操作”,RestFul URL是“描述资源”,再用HTTP方法(GET/POST/PUT/DELETE)描述对资源的操作。

(1)传统URL与RestFul URL对比

通过“用户资源”的CRUD操作(增删改查),能直观看到两者的差异:

操作类型传统URL(描述操作)RestFul URL(描述资源)对应的HTTP方法
查询用户http://localhost:8080/getUser?id=1http://localhost:8080/user/1GET(查询)
新增用户http://localhost:8080/addUserhttp://localhost:8080/userPOST(新增)
修改用户http://localhost:8080/updateUser?id=1http://localhost:8080/user/1PUT(修改)
删除用户http://localhost:8080/deleteUser?id=1http://localhost:8080/user/1DELETE(删除)

(2)核心特征

  1. 资源为核心:URL中只包含“资源名称”(如userorder),不包含“操作动词”(如getadd)。
  2. HTTP方法定操作:用GET(查)、POST(增)、PUT(改)、DELETE(删)对应CRUD,语义清晰。
  3. 路径传参:通过URL占位符(如/user/{id})传递参数,而非?id=1这种键值对形式,URL更简洁。
  4. 返回数据无视图:RestFul接口通常返回JSON/字符串(而非跳转JSP),因此常用@RestController注解。

二、RestFul 有什么用,功能是什么,优点是什么

RestFul风格不是“新功能”,而是“规范设计”,它解决了传统URL的混乱问题,让接口更易维护、易协作,尤其适合前后端分离项目。

1. 核心功能

  • 统一API设计标准:团队无需再讨论“URL该叫getUser还是queryUser”,按RestFul规范即可,降低沟通成本。
  • 支持多种数据交互:可通过@RequestBody接收JSON、表单等数据,也可通过@PathVariable接收路径参数,适配前后端分离场景。
  • 兼容HTTP协议特性:充分利用HTTP方法的语义(如GET幂等性、POST非幂等性),让接口更符合协议设计初衷(幂等性指多次请求结果一致,如查询操作)。

2. 核心优点

  1. URL更简洁:去掉冗余的“操作动词”和?键值对,如/user/1/getUser?id=1更短、更易读。
  2. 语义更清晰:看到URL就知道是“操作哪个资源”(如/user是用户资源),看到HTTP方法就知道是“做什么操作”(如GET是查询),新人也能快速理解接口含义。
  3. 安全性更高
    • 避免URL暴露操作逻辑(如传统deleteUser容易被恶意猜测);
    • POST/PUT/DELETE方法不被浏览器缓存,减少敏感操作的风险(GET请求会被浏览器缓存,不适合删除/修改)。
  4. 易扩展、易维护:前后端分离项目中,前端只需按“资源+HTTP方法”调用接口,后端修改实现逻辑时,无需变更URL,降低耦合。

三、RestFul 怎么使用

SpringMVC对RestFul风格提供了完美支持,核心是通过“HTTP方法注解”(如@GetMapping)、“路径变量注解”(@PathVariable)、“请求体注解”(@RequestBody)实现,以下基于你提供的RestFullController代码,分步骤实战。

1. 环境准备

上一篇博客地址
https://blog.csdn.net/2402_83322742/article/details/152269419

由于上一篇已完成spring-webmvc依赖、springmvc.xml配置(组件扫描、MVC注解驱动),本文无需新增依赖或修改配置,只需在com.niit.controller包下新增RestFullController.java即可,项目结构保持不变:

springMVC
├── src
│   └── main
│       ├── java
│       │   └── com.niit
│       │       ├── controller
│       │       │   ├── ...(原有控制器)
│       │       │   └── RestFullController.java(新增)  // 本文核心控制器
│       │       └── pojo
│       └── resources
│           └── springmvc.xml(复用,无需修改)
└── web└── WEB-INF└── web.xml(复用,无需修改)

在这里插入图片描述

2. 核心代码实现与解析

以下是完整的RestFullController代码,包含HTTP方法注解、路径变量、请求体接收的核心用法。

在这里插入图片描述

package com.niit.controller;import org.springframework.web.bind.annotation.*;// @RestController = @Controller + @ResponseBody
// 作用:1. 标记为控制器;2. 所有方法返回值直接转为JSON/字符串,不跳转JSP(RestFul必备)
@RestController
public class RestFullController {// 1. HTTP方法注解:@GetMapping = @RequestMapping(method = RequestMethod.GET)// 作用:处理GET请求,对应“查询资源”操作,浏览器默认发起GET请求@GetMapping("/a")public String fun1() {// 返回字符串(也可返回User对象,会自动转为JSON)return "GetMapping:查询资源成功";}// 2. @PostMapping = @RequestMapping(method = RequestMethod.POST)// 作用:处理POST请求,对应“新增资源”操作(需用Postman/前端表单发起)@PostMapping("/a")public String fun2() {return "PostMapping:新增资源成功";}// 3. @PutMapping = @RequestMapping(method = RequestMethod.PUT)// 作用:处理PUT请求,对应“修改资源”操作(需用Postman发起)@PutMapping("/a")public String fun3() {return "PutMapping:修改资源成功";}// 4. @DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)// 作用:处理DELETE请求,对应“删除资源”操作(需用Postman发起)@DeleteMapping("/a")public String fun4() {return "DeleteMapping:删除资源成功";}// 5. 路径变量:@PathVariable,接收URL中的占位符参数(RestFul核心传参方式)// URL格式:/a/100/zhangsan,其中{id}和{name}是占位符,需与@PathVariable参数名一致@GetMapping("/a/{id}/{name}")public String fun5(// @PathVariable("id"):将URL中{id}的值,赋值给后端id变量@PathVariable("id") String id,@PathVariable("name") String name) {// 拼接参数返回(实际开发中可查询数据库,返回资源详情)return "GetMapping:资源ID=" + id + ",资源名称=" + name;}// 6. 请求体:@RequestBody,接收请求体中的数据(如JSON、表单数据)// 作用:解决POST/PUT请求中“大量参数传递”问题(比@RequestParam更适合复杂数据)@PostMapping("/a/form")public String fun6(// @RequestBody:将请求体中的数据(如JSON)转为字符串(也可转为User对象)@RequestBody String str) {return "PostMapping:接收的请求体数据=" + str;}
}

3. 核心代码讲解

(1). 类注解:@RestController

@RestController
public class RestFullController { ... }
  • 作用:这是一个组合注解,等价于 @Controller + @ResponseBody
    • @Controller:标记此类为SpringMVC的控制器,负责处理HTTP请求。
    • @ResponseBody:让所有方法的返回值直接作为HTTP响应体(字符串/JSON)返回给前端,不经过视图解析器(无需跳转JSP页面),适合接口开发。
  • 场景:用于开发纯数据接口(如前后端分离项目),而非传统的页面跳转。

(2). HTTP方法注解@GetMapping/@PostMapping/@PutMapping/@DeleteMapping

这四个注解是@RequestMapping的简化版,分别对应HTTP协议的四种请求方法,是RestFul风格的核心,用于通过“请求方法+URL”明确接口语义。

2.1 @GetMapping(“/a”)
@GetMapping("/a")
public String fun1() {return "GetMapping:查询资源成功";
}
  • 对应HTTP方法:GET(查询)
  • 作用:处理GET http://localhost:8080/a请求,语义上表示“查询资源”。
  • 特点:GET请求的参数会拼在URL后(如/a?id=1),但此处未接收参数,仅演示基础用法。
2.2 @PostMapping(“/a”)
@PostMapping("/a")
public String fun2() {return "PostMapping:新增资源成功";
}
  • 对应HTTP方法:POST(新增)
  • 作用:处理POST http://localhost:8080/a请求,语义上表示“新增资源”。
  • 特点:POST请求的参数在请求体中(非URL拼接),适合传递敏感数据(如密码)或大量数据。
2.3 @PutMapping(“/a”)
@PutMapping("/a")
public String fun3() {return "PutMapping:修改资源成功";
}
  • 对应HTTP方法:PUT(修改)
  • 作用:处理PUT http://localhost:8080/a请求,语义上表示“全量修改资源”(更新资源的所有字段)。
2.4 @DeleteMapping(“/a”)
@DeleteMapping("/a")
public String fun4() {return "DeleteMapping:删除资源成功";
}
  • 对应HTTP方法:DELETE(删除)
  • 作用:处理DELETE http://localhost:8080/a请求,语义上表示“删除资源”。

(3). 路径参数接收:@PathVariable

@GetMapping("/a/{id}/{name}")
public String fun5(@PathVariable("id") String id,@PathVariable("name") String name
) {return "GetMapping:资源ID=" + id + ",资源名称=" + name;
}
  • URL格式GET http://localhost:8080/a/100/书籍(其中100书籍是动态参数)
  • 核心注解@PathVariable
    • {id}{name}:在URL中定义“路径参数占位符”,表示此处是动态值。
    • @PathVariable("id"):将URL中{id}位置的实际值(如100)绑定到方法参数id上。
  • 作用:实现“参数嵌入URL路径”,替代传统的?id=100&name=书籍拼接方式,让URL更简洁、语义更清晰。
  • 注意:路径参数名({id})与@PathVariable的参数名("id")必须一致,否则无法正确接收。

(4). 请求体参数接收:@RequestBody

@PostMapping("/a/form")
public String fun6(@RequestBody String str
) {return "PostMapping:接收的请求体数据=" + str;
}
  • URL格式POST http://localhost:8080/a/form
  • 核心注解@RequestBody
    • 作用:接收HTTP请求体中的数据(如JSON、XML、普通文本等),并绑定到方法参数str上。
    • 适用场景:前端传递复杂参数(如多字段表单、对象)时,通常将数据转为JSON格式放在请求体中,后端用@RequestBody接收。
  • 示例:若前端发送JSON格式请求体{"username":"张三","age":20},则str会接收该JSON字符串,返回结果为"PostMapping:接收的请求体数据={"username":"张三","age":20}"

4. 代码核心逻辑解释

  • HTTP方法注解@GetMapping@PostMapping等是@RequestMapping的简化写法,直接绑定HTTP方法,避免手动写method = RequestMethod.GET,代码更简洁。
  • @PathVariable:必须与URL中的占位符{}名称一致(如{id}对应@PathVariable("id")),若名称一致,可省略括号内的内容(如@PathVariable String id)。
  • @RequestBody
    • 接收前端传递的JSON/表单数据时,需确保请求头Content-Type与数据格式匹配(如JSON对应application/json,表单对应application/x-www-form-urlencoded);
    • 若接收的是实体类(如@RequestBody User user),SpringMVC会自动将JSON/表单数据转为User对象(需属性名一致)。

3. 项目运行与功能测试

RestFul接口的测试需区分HTTP方法:GET请求可直接用浏览器,POST/PUT/DELETE需用Postman(或PostWoman)工具发起,以下分场景测试所有功能。

分场景测试(附操作步骤)

测试场景操作方式(Postman/浏览器)预期结果
@GetMapping(无参数)浏览器访问http://localhost:8080/a页面显示“GetMapping:查询资源成功”
@PostMapping(无参数)Postman选择“POST”,输入URLhttp://localhost:8080/a,点击“Send”响应显示“PostMapping:新增资源成功”
@PutMapping(无参数)Postman选择“PUT”,输入URLhttp://localhost:8080/a,点击“Send”响应显示“PutMapping:修改资源成功”
@DeleteMapping(无参数)Postman选择“DELETE”,输入URLhttp://localhost:8080/a,点击“Send”响应显示“DeleteMapping:删除资源成功”
@PathVariable(路径传参)浏览器访问http://localhost:8080/a/100/zhangsan页面显示“GetMapping:资源ID=100,资源名称=zhangsan”
@RequestBody(接收JSON)Postman选择“POST”,URLhttp://localhost:8080/a/form
1. 点击“Body”→选择“raw”→格式选“JSON”;
2. 输入JSON:{"id":"200","name":"lisi"}
3. 点击“Send”
响应显示“PostMapping:接收的请求体数据={“id”:“200”,“name”:“lisi”}”

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-Spring入门指南知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13040333.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

http://www.dtcms.com/a/430597.html

相关文章:

  • 益阳网站制作公司地址高端装饰公司网站设计
  • 产生式规则在自然语言处理深层语义分析中的演变、影响与未来启示
  • K230基础-摄像头的使用
  • 【文件读写】绕过验证下
  • 谷歌官方网站注册12306铁路网站开发语言
  • 深度学习基础知识-深度神经网络基础
  • pycharm找不到Tencent Cloud CodeBuddy如何安装[windows]?pycharm插件市场找不到插件如何安装?
  • 【开题答辩全过程】以 SpringbootVueUniapp农产品展销平台为例,包含答辩的问题和答案
  • C++中的小数及整数位填充
  • DuckDB 的postgresql插件无法访问GooseDB
  • 电子商务软件网站建设的核心网站布局模板
  • 从Nginx到Keepalived:反向代理高可用的技术闭环——Nginx、Keepalived、VIP与VRRP的深度联动解析
  • 现场运维指南
  • 查看和修改Linux的主机名称
  • Vmware虚拟机联网问题,显示:线缆已拔出!!!
  • 部署Nginx(Kylinv10sp3、Ubuntu2204、Rocky9.3)
  • 【含文档+PPT+源码】基于微信小程序的房屋租赁系统
  • GitHub 热榜项目 - 日榜(2025-10-01)
  • linux的文件和目录操作函数
  • 网站首页psdwordpress禁用修订
  • Coze源码分析-资源库-编辑工作流-后端源码-领域/数据访问/基础设施层
  • 13个GNS3 3.0.5 appliances设备模板镜像合集:IOSv/L2,IOU L2/L3,以及IOS-XE
  • Java-Spring入门指南(十九)thymeleaf基本概念
  • GameObject 常见类型详解 -- 宝箱(CHEST)
  • GameObject 常见类型详解 -- 按钮(BUTTON)
  • 【SpringAI】第四弹:深入解析 Rag 检索增强工作流程、最佳实践和调优
  • 自助网站免费国外用tornado做的网站
  • 华为业务流程架构:主干清晰、末端灵活
  • 基于any2web+deepseek实现对三角函数定义的理解
  • 建个企业网站一年需要多少钱网站网页切换怎么做的