Spring Boot 注解探秘:HTTP 请求的魅力之旅

在SpringBoot应用开发中,处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程,使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理,同时也提升了代码的可读性和维护性。

一、@RequestMapping

@RequestMapping用于将特定的HTTP请求映射到特定的方法上。可用于类级别和方法级别上,以下是代码示例。

java 复制代码
@RestController
@RequestMapping("/customer-api/") // 类级别,所有方法都以customer-api开头
public class  CustomerApi{
	@RequestMapping(value = "/get-customer-by-id", method = RequestMethod.GET){ 
	// 方法级别,当收到对/customer-api/get-customer-by-id路径的GET请求时,会调用getCustomerById方法。
	Response<Customer> getCustomerById(@RequestParam("id") Integer id)
		......
	}
}

本节示例中@RestController和@RequestParam注解可以先忽略,下面会介绍到。

二、PutMapping、DeleteMapping、GetMapping和PostMapping

为了更加明确表示不同的HTTP方法,Spring Boot提供了一组特定的注解,分别对应PUT, DELETE、GET、POST(增删改查)请求。

java 复制代码
@RestController
@RequestMapping("/customer-api/") 
public class  CustomerApi{
	
	@PutMapping("/add-customer") 
	// 增加的请求,和@RequestMapping的PUT方式等价
	Response<?> addCustomer(@RequestBody Customer customer)
		......
	}
	
	@DeleteMapping("/delete-customer-by-id") 
	// 删除的请求,和@RequestMapping的DELETE方式等价
	Response<?> deleteCustomer(@RequestParam("id") Integer id)
		......
	}
	
	@PostMapping("/update-customer") 
	// 更新的请求,和@RequestMapping的POST方式等价
	Response<?> updateCustomer(@RequestBody Customer customer)
		......
	}

	// @RequestMapping(value = "/get-customer-by-id", method = RequestMethod.GET)   // 方式1
	@GetMapping("/get-customer-by-id") // 和方式1是等价的。
	Response<Customer> getCustomerById(@RequestParam("id") Integer id)
		......
	}
}

三、@RequestParam和@PathVariable

  • @RequestParam用于获取查询参数
  • @PathVariable用于获取路径变量
java 复制代码
	@GetMapping("/get-customer-by-id"){ 
	Response<Customer> getCustomerById(@RequestParam("id") Integer id) // @RequestParam就可获取请求路径/get-customer-by-id?id=1中的id的值
		......
	}
	
	@GetMapping("/get-customer/{id}"){ 
	Response<Customer> getCustomerById(@PathVariable("id") Integer id) // @PathVariable可获取路径/get-customer/{id}中的id的值
		......
	}

四、@RequestBody

@RequestBody注解用于将 HTTP 请求的主体内容绑定到方法的参数上 。通常用于处理 POST 和 PUT 请求 ,当请求的主体是 JSON 或 XML 格式的数据时非常有用。

示例见第二节,这里就不重复赘述了。

五、@RestController和Controller

@RestController和@Controller都是用于定义控制器类的注解 ,但是两者之间有细微的差异。
@RestController是一个组合注解,相当于@Controller和@ResponseBody。 用@RestController标注的API类,其中的方法会直接返回数据(如JSON、XML),不会返回视图。

@Controller刚好相反,它标注的类中的方法会直接返回视图(如JSP、Thymeleaf模版等)。

  • 小结:现在的微服务项目基本都是前后端分离,所以@Controller已经慢慢的淡出了视野,很少使用,而@RestController已然成为了主流。

后面有时间了在聊聊GET和POST请求的区别,大厂面试被问到的频次贼高。

相关推荐
顽疲12 分钟前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog20 分钟前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
upala22 分钟前
【仓颉语言入门 · 第二篇 第 6 课】
后端
罗丹丹Luna23 分钟前
移动端显示“已提交”以后:SAP 与低代码集成该怎样暴露真实状态
后端·架构
用户212968352616826 分钟前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm
码事漫谈27 分钟前
因为太想讨好你,所以AI会骗你
后端
吴凡wudianmei28 分钟前
每调一次模型都花钱?如何用工程手段把调用压到最少?
前端·后端·架构
花间相见29 分钟前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见31 分钟前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
helmsail39 分钟前
05 管理活动与选品
java