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

广州网站建设好做吗/网络营销手段有哪四种

广州网站建设好做吗,网络营销手段有哪四种,广州番禺区人才网,网站建设开发公司哪家好文章目录 1. 引言2. PathVariable:处理路径变量2.1 简介2.2 使用示例 3. RequestParam:处理请求参数3.1 简介3.2 使用示例 4. RequestBody:处理请求体4.1 简介4.2 使用示例 5. 多个注解的组合使用6. 参数绑定的原理6.1 HandlerMethodArgument…

文章目录

    • 1. 引言
    • 2. @PathVariable:处理路径变量
      • 2.1 简介
      • 2.2 使用示例
    • 3. @RequestParam:处理请求参数
      • 3.1 简介
      • 3.2 使用示例
    • 4. @RequestBody:处理请求体
      • 4.1 简介
      • 4.2 使用示例
    • 5. 多个注解的组合使用
    • 6. 参数绑定的原理
      • 6.1 HandlerMethodArgumentResolver的工作流程
      • 6.2 扩展HandlerMethodArgumentResolver
    • 7. 参数的验证与异常处理
    • 8. 性能优化与拓展
      • 8.1 参数绑定的性能优化
      • 8.2 拓展参数解析器
    • 9. 总结

在这里插入图片描述

🎉深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:架构设计
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

1. 引言

在Spring Boot中,通过使用注解来处理请求参数是极为常见的场景。@PathVariable@RequestParam@RequestBody是其中的三个核心注解,它们分别用于处理路径变量、请求参数和请求体。本文将深入解析这三个注解的正确使用方式,通过代码示例和详细解释,帮助读者更好地理解在不同场景下如何正确使用这些注解。
在这里插入图片描述

2. @PathVariable:处理路径变量

2.1 简介

@PathVariable注解用于从请求路径中获取变量的值。它常用于RESTful风格的请求,将路径中的一部分作为参数传递给方法。

2.2 使用示例

@RestController
@RequestMapping("/api/users")
public class UserController {@GetMapping("/{userId}")public ResponseEntity<User> getUserById(@PathVariable Long userId) {// 根据用户ID查询用户信息User user = userService.getUserById(userId);if (user != null) {return new ResponseEntity<>(user, HttpStatus.OK);} else {return new ResponseEntity<>(HttpStatus.NOT_FOUND);}}
}

在上述示例中,@GetMapping("/{userId}")表示处理/api/users/{userId}路径的GET请求,并通过@PathVariable注解将userId作为方法参数接收。

在这里插入图片描述

3. @RequestParam:处理请求参数

3.1 简介

@RequestParam注解用于从请求中获取查询参数。它适用于处理表单提交或URL中的查询参数。

3.2 使用示例

@RestController
@RequestMapping("/api/users")
public class UserController {@GetMapping("/search")public ResponseEntity<List<User>> searchUsers(@RequestParam String username,@RequestParam(required = false) Integer age) {// 根据用户名和年龄查询用户列表List<User> users = userService.searchUsers(username, age);return new ResponseEntity<>(users, HttpStatus.OK);}
}

在上述示例中,@GetMapping("/search")表示处理/api/users/search路径的GET请求,并通过@RequestParam注解分别接收username和可选参数age

4. @RequestBody:处理请求体

4.1 简介

@RequestBody注解用于接收请求体中的数据,通常用于处理POST请求,将请求体的JSON或XML数据转化为Java对象。

4.2 使用示例

@RestController
@RequestMapping("/api/users")
public class UserController {@PostMappingpublic ResponseEntity<User> createUser(@RequestBody UserRequest userRequest) {// 从请求体中创建用户User user = userService.createUser(userRequest);return new ResponseEntity<>(user, HttpStatus.CREATED);}
}

在上述示例中,@PostMapping表示处理/api/users路径的POST请求,并通过@RequestBody注解将请求体中的JSON数据映射为UserRequest对象。

5. 多个注解的组合使用

在实际应用中,我们可能需要同时使用多个注解来处理不同类型的参数。以下是一个示例,演示了@PathVariable@RequestParam@RequestBody的组合使用:

@RestController
@RequestMapping("/api/users")
public class UserController {@GetMapping("/{userId}")public ResponseEntity<User> getUserById(@PathVariable Long userId) {// 根据用户ID查询用户信息User user = userService.getUserById(userId);if (user != null) {return new ResponseEntity<>(user, HttpStatus.OK);} else {return new ResponseEntity<>(HttpStatus.NOT_FOUND);}}@GetMapping("/search")public ResponseEntity<List<User>> searchUsers(@RequestParam String username,@RequestParam(required = false) Integer age) {// 根据用户名和年龄查询用户列表List<User> users = userService.searchUsers(username, age);return new ResponseEntity<>(users, HttpStatus.OK);}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody UserRequest userRequest) {// 从请求体中创建用户User user = userService.createUser(userRequest);return new ResponseEntity<>(user, HttpStatus.CREATED);}
}

在这个示例中,getUserById方法使用了@PathVariablesearchUsers方法使用了@RequestParam,而createUser方法使用了@RequestBody,通过这种方式,我们可以处理不同类型的请求参数。

在这里插入图片描述

6. 参数绑定的原理

了解注解的正确使用还需要了解参数绑定的原理。Spring Boot通过

HandlerMethodArgumentResolver来完成参数绑定,它负责将请求中的参数值映射到方法的参数上。

6.1 HandlerMethodArgumentResolver的工作流程

  1. 解析参数注解: Spring Boot首先会遍历方法的参数,识别出使用了哪些注解,如@PathVariable@RequestParam@RequestBody等。

  2. 查找对应的HandlerMethodArgumentResolver: 根据参数注解,Spring Boot会查找合适的HandlerMethodArgumentResolver,每个注解对应一个HandlerMethodArgumentResolver

  3. 参数解析: 通过找到的HandlerMethodArgumentResolver,Spring Boot会将请求中的参数值解析成方法参数的实际值。

6.2 扩展HandlerMethodArgumentResolver

在某些情况下,我们可能需要自定义参数的解析逻辑。这时,可以通过实现HandlerMethodArgumentResolver接口来扩展Spring Boot的参数解析器。

以下是一个简单的示例,展示了如何扩展一个自定义的参数解析器:

public class CustomArgumentResolver implements HandlerMethodArgumentResolver {@Overridepublic boolean supportsParameter(MethodParameter parameter) {return parameter.getParameterType().equals(CustomType.class);}@Overridepublic Object resolveArgument(MethodParameter parameter,ModelAndViewContainer mavContainer,NativeWebRequest webRequest,WebDataBinderFactory binderFactory) throws Exception {// 自定义解析逻辑// ...return customValue;}
}

在上述示例中,supportsParameter方法用于判断是否支持解析特定类型的参数,而resolveArgument方法则实现了具体的参数解析逻辑。

7. 参数的验证与异常处理

在处理参数的同时,参数的验证也是一个重要的方面。Spring Boot提供了强大的参数验证功能,通过@Valid注解和BindingResult对象,我们能够对参数进行验证,并处理验证失败的情况。

以下是一个简单的参数验证示例:

@RestController
@RequestMapping("/api/users")
public class UserController {@PostMappingpublic ResponseEntity<User> createUser(@Valid @RequestBody UserRequest userRequest, BindingResult result) {// 参数验证if (result.hasErrors()) {// 处理验证失败的情况return new ResponseEntity<>(HttpStatus.BAD_REQUEST);}// 从请求体中创建用户User user = userService.createUser(userRequest);return new ResponseEntity<>(user, HttpStatus.CREATED);}
}

在上述示例中,通过@Valid注解标记了UserRequest参数,同时使用BindingResult对象来处理验证失败的情况。

8. 性能优化与拓展

8.1 参数绑定的性能优化

在实际应用中,当请求参数较多或者复杂时,参数绑定的性能可能成为一个关注点。可以通过以下方式进行性能优化:

  • 使用基本类型: 在可能的情况下,使用基本类型而非包装类型,减少自动装箱的开销。

  • 避免复杂对象: 尽量避免使用过于复杂的对象作为方法参数,减少反射和复杂对象创建的开销。

8.2 拓展参数解析器

除了扩展参数解析器外,还可以通过自定义注解和HandlerMethodArgumentResolver来实现更灵活的参数处理逻辑。例如,定义一个自定义注解@CurrentUser,并通过HandlerMethodArgumentResolver将当前用户绑定到方法参数上。

9. 总结

本文深入解析了Spring Boot中的注解@PathVariable@RequestParam@RequestBody的正确使用方式。通过代码示例和详细解释,读者能够更好地理解在不同场景下如何使用这些注解。同时,了解了参数绑定的原理和性能优化的相关内容,以及如何扩展和拓展Spring Boot中的参数处理逻辑。在实际应用中,根据具体需求选择合适的注解和处理方式,能够提高代码的可读性和可维护性,更好地发挥Spring Boot的优势。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

相关文章:

深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用

文章目录 1. 引言2. PathVariable&#xff1a;处理路径变量2.1 简介2.2 使用示例 3. RequestParam&#xff1a;处理请求参数3.1 简介3.2 使用示例 4. RequestBody&#xff1a;处理请求体4.1 简介4.2 使用示例 5. 多个注解的组合使用6. 参数绑定的原理6.1 HandlerMethodArgument…...

Qt Location中加载地图对象

在Qt Location中加载地图对象&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1&#xff0c;首先&#xff0c;确保你已经安装了Qt Location模块&#xff0c;并在项目中包含了相应的头文件。在项目文件&#xff08;.pro&#xff09;中添加以下行&#xff1a; QT locatio…...

4-Docker命令之docker ps

1.docker ps介绍 docker ps命令是用来列出容器的相关信息 2.docker ps用法 docker ps [参数] [rootcentos79 ~]# docker ps --helpUsage: docker ps [OPTIONS]List containersAliases:docker container ls, docker container list, docker container ps, docker psOptions…...

你在地铁上修过bug吗?

作为技术人员&#xff0c;有没有遇到下班路上收到老板电话&#xff0c;系统故障&#xff0c;然后地铁上掏出电脑&#xff0c;修bug的场景。自己负责的业务线上出现问题&#xff0c;负责人心里是很慌的&#xff0c;在这种心理状态下做事很容易二次犯错&#xff0c;造成更大的问题…...

CPU、MCU、MPU、DSP、FPGA各是什么?有什么区别?

1、CPU 中央处理器&#xff0c;简称 CPU&#xff08;Central Processing Unit&#xff09;&#xff0c;中央处理器主要包括两个部分&#xff0c;即控制器、运算器&#xff0c;其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。 电子计算机三大核心部件就是CPU…...

SpringBoot之logback 在Linux系统上启动的时候,设置日志按日期分割并设置指定时间自动清除日志

一、在src/main/resources/下创建logback-spring.xml文件 <?xml version"1.0" encoding"UTF-8"?> <configuration><!-- 日志存放路径 --><property name"log.path" value"/home/xmmc/logs" /><!-- 日志…...

OpenHarmony北向-让更广泛的应用开发者更容易参与

一、标准系统的体验 按照官方文档指导&#xff0c;这样操作&#xff0c;OH标准系统开发板就可以运行开发者开发的OpenHarmony应用了。 二、实际情况 按照开发文档上的说明&#xff0c;肯定是装不上的。因为OH不同的发行版&#xff0c;不同发行板不同的设备&#xff0c;IDE&…...

数据结构之归并排序及排序总结

目录 归并排序 归并排序的时间复杂度 排序的稳定性 排序总结 归并排序 归并排序大家只需要掌握其递归方法即可&#xff0c;非递归方法由于在某些特殊场景下边界难控制&#xff0c;我们一般很少使用非递归实现归并排序。那么归并排序的递归方法我们究竟是怎样实现呢&#xff…...

仿windows12网盘,私有云盘部署教程,支持多种网盘

仿windows12网盘,私有云盘部署教程&#xff0c;支持多种网盘 资源宝分享&#xff1a;www.httple.net 视频教程&#xff1a;https://www.bilibili.com/video/BV1m64y1G7Bq/ 宝塔部署方式&#xff1a; 1.验证是否安装jdk,没有安装请看安装教程 推荐安装jdk8&#xff08;注意您…...

深度学习 时间序列回归学习笔记

目录 常用的深度学习时间序列回归模型: ARIMA模型 ETS模型 效果评估...

【postgresql】ERROR: INSERT has more expressions than target columns

执行下面sql insert into apply_account_cancellation3 select * from pply_account_cancellation; 返回下面错误信息 insert into apply_account_cancellation3 select * from apply_account_cancellation > ERROR: INSERT has more expressions than target colu…...

Android Kotlin语言下的文件存储

目录 将数据存储到文件中 创建文件和保存数据 读取文件 SharedPreferences存储 存储数据到SharedPreferences中 Context类中的getSharedPreferences()方法 Activity类中的getPreferences()方法 从SharedPreferences中读取数据 SQLite数据库存储 创建数据库 调用数据…...

Verilog 入门(八)(验证)

文章目录 编写测试验证程序波形产生值序列重复模式 测试验证程序实例从文本文件中读取向量实例&#xff1a;时序检测器 测试验证程序用于测试和验证设计方法的正确性。Verilog 提供强有力的结构来说明测试验证程序。 编写测试验证程序 测试验证程序有三个主要目的&#xff1a;…...

vue3 vue-router 导航守卫 (五)

在Vue 3中&#xff0c;导航守卫仍然是一个重要的概念&#xff0c;用于在路由切换时执行一些特定的逻辑。Vue Router提供了多个导航守卫&#xff0c;包括全局守卫、路由独享守卫和组件内守卫。可以在路由切换时执行一些特定的逻辑&#xff0c;例如身份验证、权限控制、数据加载等…...

Git命令---查看远程仓库

介绍 使用git命令查看绑定的远程仓库。 命令 git remote -v...

12.8作业

1. 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是…...

算法:有效的括号(入栈出栈)

时间复杂度 O(n) 空间复杂度 O(n∣Σ∣)&#xff0c;其中 Σ 表示字符集&#xff0c;本题中字符串只包含 6 种括号 /*** param {string} s* return {boolean}*/ var isValid function(s) {const map {"(":")","{":"}","["…...

vxworks常用的指令归纳

目的&#xff1a;方便自己查阅 tftpboot 0x10000000 vxworks bootelf 0x10000000 ifconfig "gem0 dowm" ifconfig "gem0 inet 192.168.0.81" ifconfig "gem0 lladdr 01:02:03:04:05:06:07" ifconfig "gem0 up" ld 0,1,"…...

线性回归实战

3.1 使用正规方程进行求解 3.1.1 简单线性回归 公式 &#xff1a; y w x b y wx b ywxb 一元一次方程&#xff0c;在机器学习中一元表示一个特征&#xff0c;b表示截距&#xff0c;y表示目标值。 使用代码进行实现&#xff1a; 导入包 import numpy as np import matp…...

stm32 使用18B20 测试温度

用18b20 测试温度是非常常用的&#xff0c;不过18B20的调试不是这么容易的&#xff0c;有些内容网上很多的&#xff0c;不再重复说了&#xff0c;我先把波形说一下&#xff0c;再说程序部分&#xff1a; 整个都温度数据的顺序是&#xff1a; 1.700uS的低电平复位并测试18B20的…...

【Delphi】一个函数实现ios,android震动功能 Vibrate(包括3D Touch 中 Peek 震动等)

一、前言 我们在开发移动端APP的时候&#xff0c;有时可能需要APP能够提供震动功能&#xff0c;以便提醒操作者&#xff0c;特别是ios提供的3D Touch触感功能&#xff0c;操作者操作时会有触感震动&#xff0c;给操作者的感觉很友好。那么&#xff0c;在Delphi的移动端FMX开发中…...

国产Type-C PD芯片—接口快充取电芯片

常用USB PDTYPE-C受电端&#xff0c;即设备端协议IC芯片&#xff08;PD Sink&#xff0c;也叫PD诱骗芯片&#xff09;&#xff0c;诱导取电芯片。 产品介绍 LDR6328: ◇ 采用 SOP-8 封装 ◇ 兼容 USB PD 3.0 规范&#xff0c;支持 USB PD 2.0 ◇ 兼容 QC 3.0 规范&#x…...

pytorch学习6-非线性变换(ReLU和sigmoid)

系列文章目录 pytorch学习1-数据加载以及Tensorboard可视化工具pytorch学习2-Transforms主要方法使用pytorch学习3-torchvisin和Dataloader的使用pytorch学习4-简易卷积实现pytorch学习5-最大池化层的使用pytorch学习6-非线性变换&#xff08;ReLU和sigmoid&#xff09;pytorc…...

详解Keras3.0 Models API: Whole model saving loading

1、save方法 Model.save(filepath, overwriteTrue, **kwargs) 将模型另存为.keras文件 参数说明 filepath: 保存模型的路径。必须以.keras结尾overwrite&#xff1a;布尔值&#xff0c;表示是否覆盖已存在的文件。默认为 True&#xff0c;即覆盖已存在的文件。save_format…...

Spring Cloud Gateway 网关的基础使用

1. 什么是网关&#xff1f;网关有什么用&#xff1f; 在微服务架构中&#xff0c;网关就是一个提供统一访问地址的组件&#xff0c;它解决了内部微服务与外部的交互问题。网关主要负责流量的路由和转发&#xff0c;将外部请求引到对应的微服务实例上。同时提供身份认证、授权、…...

小米手机锁屏时间设置为永不休眠_手机不息屏_保持亮屏

环境&#xff1a;打开手机自带的锁屏时间设置发现没有 永不息屏的选项 原因&#xff1a;采用了三星OLED屏幕&#xff0c;所以根据OLED屏幕特性&#xff0c;这个是为了防止烧屏而特意设计的。非OLED机型支持设置“永不” 解决方案1&#xff1a;原生系统是支持永不锁屏的&#…...

lightdb plorasql集合类型新增可变数组

文章目录 背景集合类型可变数组可变数组示例 背景 在信创适配中&#xff0c;从Oracle迁移过来的存储过程使用到可变数组。因此在LightDB-X 23.4版本中对现有的集合类型进行了增强&#xff0c;添加了可变数组类型。 集合类型 在LightDB-X 23.4版本开始plorasql支持的集合类型…...

算法--最短路

这里写目录标题 xmind单源最短路简介所有边权都是正朴素的Dijkstra算法思想例子题解 堆优化版的Dijkstra算法 存在负数权Bellman-Ford算法思想例子题解 spfa算法思想例子题解 spfa判断负环思想例子题解 多源汇最短路简介弗洛伊德算法思想例子题解 小tips xmind 上述中&#xff…...

Linux 定时任务备份MySQL数据库

Linux 定时任务基本知识 crontab yum install crontabs &#xff08;安装 crontabs&#xff09; systemctl enable crond &#xff08;设为开机启动&#xff09; systemctl start crond&#xff08;启动crond服务&#xff09; systemctl status crond &#xff08;查看状态&a…...

查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息

文章目录 摘要1. 查询CPU使用率命令&#xff1a;top -bn1 | grep \"Cpu(s)\" | awk {split($0,arr,\" \");print 100-arr[8]}2. 查询内存命令&#xff08;单位&#xff1a;G&#xff09;&#xff1a;top -bn1 | grep \"KiB Mem\" | awk {split($…...