SpringBoot使用@RestController处理GET和POST请求

在Spring MVC中,@RestController注解的控制器类可以处理多种HTTP请求方法,包括GET和POST。这些请求方法通过特定的注解来映射,比如@GetMapping用于GET请求,@PostMapping用于POST请求。这些注解是@RequestMapping的特定化版本,提供了更清晰的语义。

GET请求

GET请求通常用于请求数据。在@RestController中,你可以使用@GetMapping或@RequestMapping(method = RequestMethod.GET)来映射GET请求。

@RestController  
public class MyController {  @GetMapping("/greeting")  public String greeting() {  return "Hello, World!";  }  // 或者使用@RequestMapping  @RequestMapping(value = "/hello", method = RequestMethod.GET)  public String hello() {  return "Hi there!";  }  
}

在上面的例子中,/greeting和/hello路径分别映射到greeting和hello方法,这两个方法都会处理GET请求,并返回简单的字符串响应。

GET请求通常通过URL的查询字符串(query string)来传递参数。Spring MVC提供了几种注解来帮助你方便地获取这些参数。

在@RestController中处理GET请求时,@RequestParam是获取查询字符串参数的主要方式,

@PathVariable则用于从URL的路径中获取参数。

@RequestParam

@RequestParam注解用于将请求参数绑定到你的控制器方法的参数上。默认情况下,请求参数名和参数变量名需要相同,但你可以通过value或name属性来明确指定请求参数名。

@RestController  
public class MyController {  @GetMapping("/greet")  public String greet(@RequestParam(value = "name", required = false, defaultValue = "World") String name) {  return "Hello, " + name + "!";  }  
}

在这个例子中,greet方法通过@RequestParam注解接收一个名为name的请求参数。如果请求中没有提供name参数,那么name变量的值将是默认值"World"。required属性设置为false表示这个参数不是必须的。

@PathVariable

@PathVariable 是 Spring MVC 中用于将 URL 中的变量值绑定到控制器处理器方法参数上的注解。这个注解是 Spring 3.0 引入的,它允许我们从 URL 中提取变量作为方法的参数。

虽然 @PathVariable 不是直接用于GET请求参数的,但它经常与GET请求一起使用,特别是当你想从URL的路径中获取参数时。

@RestController  
public class MyController {  @GetMapping("/user/{id}")  public String getUserById(@PathVariable("id") Long userId) {  // 假设这里有一个根据userId获取用户信息的逻辑  return "User ID: " + userId;  }  
}

在这个例子中,{id}是一个路径变量,它通过@PathVariable注解绑定到userId参数上。当请求/user/123时,userId的值将是123。

@ModelAttribute

@ModelAttribute主要用于将请求参数(包括查询字符串参数、表单数据、路径变量等)绑定到Java对象上,并将这些对象添加到模型中,以便在视图渲染时使用。

@RestController
public class MyController {@GetMapping("/search")public String search(@ModelAttribute MySearchParams searchParams) {return "Searching for: " + searchParams.getQuery();}// 假设MySearchParams类如下static class MySearchParams {private String query;// 省略getter和setter方法}
}

默认值和必填性

  • 对于@RequestParam,你可以通过required属性指定参数是否是必须的,以及通过defaultValue属性为缺失的参数提供一个默认值。
  • 对于@PathVariable,没有直接的required或defaultValue属性,但你可以通过控制器方法的逻辑来处理缺失的路径变量(尽管这通常意味着请求的路径是错误的)。

POST请求

POST请求通常用于提交数据给服务器。在@RestController中,你可以使用@PostMapping或@RequestMapping(method = RequestMethod.POST)来映射POST请求。

@RestController  
public class MyController {  // 使用@PostMapping  @PostMapping("/submit")  public ResponseEntity<String> submitData(@RequestBody String data) {  // 处理数据...  return ResponseEntity.ok("Data received: " + data);  }  // 或者使用@RequestMapping  @RequestMapping(value = "/postData", method = RequestMethod.POST)  public ResponseEntity<String> postData(@RequestBody String data) {  // 处理数据...  return ResponseEntity.ok("Data posted: " + data);  }  
}

在上面的例子中,/submit和/postData路径分别映射到submitData和postData方法,这两个方法都会处理POST请求。

注意,@RequestBody注解用于将请求体中的数据绑定到方法的参数上。

在实际应用中,你可能会使用@RequestBody来接收一个Java对象,Spring会自动将请求体中的数据映射到这个对象的属性上。

Form请求

@RestController  
public class MyRestController {  @PostMapping("/submitForm")  public String submitForm(@RequestParam("username") String username,  @RequestParam("password") String password) {  return "Received username: " + username + ", password: " + password;  }  
}

JSON请求

@RestController  
public class MyJsonRestController {  @PostMapping("/submitJson")  public String submitJson(@RequestBody MyFormObject formObject) {  return "Received user: " + formObject.getUsername() + ", password: " + formObject.getPassword();  }  // 假设你有一个MyFormObject类来接收JSON数据  static class MyFormObject {  private String username;  private String password;// 省略getter和setter方法}  
}

 上传图片

@PostMapping(value = "/uploadFile", name = "上传文件")
public String uploadImage(MultipartFile file) {//获取文件原名String fileName = file.getOriginalFilename();//设置上传路径//判断上传路径是否存在,不存在则创建目录File fileDir = new File(realPath);if (!fileDir.exists()) {fileDir.mkdirs();}String strYmd= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));File fileYmdDir = new File(realPath + "/" + strYmd);if (!fileYmdDir.exists()) {fileYmdDir.mkdirs();}fileName = getFileName(fileName);String outputPath = "";//上传文件try {outputPath = realPath +"/"+strYmd+ "/" + fileName;InputStream input = file.getInputStream();FileOutputStream fos = new FileOutputStream(outputPath);IOUtils.copy(input, fos);} catch (Exception e) {System.out.println(e.getMessage());return null;}System.out.println("uploadFile:"+outputPath);return outputPath;
}

@RequestHeader

@RequestHeader 是获取请求头中的数据,通过指定参数 value 的值来获取请求头中指定的参数值。其他参数用法和 @RequestParam 完全一样。

@ResponseBody
@GetMapping("/RequestHeader")
public Map test(@RequestHeader("host") String host){Map map = new HashMap();map.put("header", host);return map;
}
@ResponseBody
@GetMapping("/RequestHeader")
public Map test(@RequestHeader Map<String, String> headers){Map map = new HashMap();map.put("headers", headers);return map;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/43583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年全面导入APS系统:提升工厂生产效率的策略

在快速变化的市场环境中&#xff0c;急单、插单、订单设计变更、订单交期变更、订单取消、供应链移动等问题已经是制造业时时刻刻都在面对的问题&#xff0c;在订单量下降的市场环境下&#xff0c;企业本身的业务工作反而越来越忙碌。在此背景下&#xff0c;当今制造业企业亟需…

JavaScript高级程序设计(第四版)--学习记录之函数(下)

函数内部 ES5中,函数内部存在两个特殊的对象:arguments和this。ES6新增了new.target属性。 arguments arguments对象其实还有一个callee属性,是一个指向arguments对象所在函数的指针。 function fb(num){ if(num<=1){ return 1; }else{ return num * fb(num-1); } }/*这个…

【pytorch24】Visdom可视化

TensorboardX pytorch有一个工具借鉴了tensorboard pip install tensorboardX 有查看变量的数值、监听曲线等功能 如何使用 新建SummaryWriter()实例 要把监听的数据&#xff0c;比如说要监听dummy_s1[0]&#xff08;y 坐标&#xff09;存放到data/scalar1中&#xff0c;…

ASPICE是汽车软件开发中的质量保证流程

复杂的汽车系统对软件的质量和可靠性提出了极高的要求。为了确保汽车软件的高质量和可靠性&#xff0c;ASPICE&#xff08;Automotive SPICE&#xff0c;汽车软件过程改进和能力确定&#xff09;流程应运而生。本文将对ASPICE流程进行详细介绍。 一、ASPICE概述 ASPICE是汽车行…

【React】React18 Hooks 之 useContext

目录 useContext1、Provider和 useContext2、Provider 和Consumer3、Provider 嵌套4、React.createContext提供的Provider和class的contextType属性5、读、写Context&#xff08;1&#xff09;父组件修改Context&#xff08;2&#xff09;子组件修改Context 好书推荐 useContex…

NPDP有什么价值?究竟值不值得去考?

NPDP其实就是产品经理国际资格认证&#xff0c;是美国产品开发管理协会发起的&#xff0c;集理论、方法和实践一体&#xff0c;在新产品开发方面有一个很全面的知识体系。是国际公认的新产品开发专业认证&#xff0c;具有权威性。 NPDP能够很好地帮你在做新产品的道路上少走弯…

【已解决】腾讯云安装了redis,但是本地访问不到,连接不上

汇总了我踩过的所有问题。 查看配置文件redis.conf 1、把bind 127.0.0.1给注释掉&#xff08;前面加个#就是&#xff09;或者改成bind 0.0.0.0&#xff0c;因为刚下载时它是默认只让本地访问。&#xff08;linux查找文档里的内容可以输入/后面加需要匹配的内容&#xff0c;然后…

Perl 语言开发(七):哈希和关联数组

目录 1. 哈希与关联数组的概述 2. 哈希的基本操作 2.1 创建哈希 2.2 访问哈希值 2.3 添加和修改哈希值 2.4 删除哈希值 2.5 检查哈希中是否存在某个键 3. 迭代哈希 3.1 使用 keys 和 values 3.2 使用 each 4. 复杂数据结构中的哈希 4.1 哈希的数组 4.2 哈希的哈希…

clickhouse-jdbc-bridge rce

clickhouse-jdbc-bridge 是什么 JDBC bridge for ClickHouse. It acts as a stateless proxy passing queries from ClickHouse to external datasources. With this extension, you can run distributed query on ClickHouse across multiple datasources in real time, whic…

Java基础-组件及事件处理(上)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 Swing 概述 MVC 架构 Swing 特点 控件 SWING UI 元素 JFrame SWING 容器 说明 常用方法 示例&a…

服务器信息获取工具

功能介绍 SSH连接到远程服务器&#xff1a; 用户可以输入目标服务器的IP地址、用户名、密码以及SSH端口&#xff08;默认22&#xff09;。 工具会尝试连接到远程服务器&#xff0c;并在连接失败时显示错误信息。 运行命令并返回输出&#xff1a; 工具可以在远程服务器上运…

python (必看)10个提升接口自动化编写效率的脚本!

亲爱的开发者们&#xff0c;&#x1f44b; 在快速迭代的软件开发周期中&#xff0c;接口自动化测试扮演着至关重要的角色。今天&#xff0c;我们将分享10个实用的Python小脚本&#xff0c;它们能够显著提升你编写接口自动化测试的效率。无论是初学者还是资深工程师&#xff0c;…

某音商品详情数据实时API接入

在抖音平台上&#xff0c;商品详情数据接口&#xff08;通常被提及为“item get”或”item_get_app“API&#xff09;并不是直接对公众或第三方开发者开放的。抖音的API和接口主要用于其内部系统、合作伙伴以及通过其官方渠道&#xff08;如抖音小店、抖音开放平台等&#xff0…

算法体系-26 第二十六节:第26节:单调栈结构 (5节)

一 单调栈知识讲解 1.1描述 一个数组里面想的到每个位置与他最近的左边和右边比他小的最近的信息 1.2 分析 通过单调栈的特点&#xff0c;for遍历数组中的每个数&#xff0c;当前数来的时候对比单调栈中的数进行每个数的左右判断完满足条件的进行更新到当前i种的 int[][] re…

WPScan漏洞扫描工具的介绍及使用

目录 1. 介绍2. 常用参数 1. 介绍 WPScan是Kali Linux默认自带的一款漏洞扫描工具&#xff0c;它采用Ruby编写&#xff0c;能够扫描WordPress网站中的多种安全漏洞&#xff0c;其中包括WordPress本身的漏洞、插件漏洞和主题漏洞&#xff0c;最新版本WPScan的数据库中包含超过18…

采用3种稀疏降噪模型对心电信号进行降噪(Matlab R2021B)

心电信号采集自病人体表&#xff0c;是一种无创性的检测手段。因此&#xff0c;心电信号采集过程中&#xff0c;本身也已经包含了机体内部其他生命活动带来的噪声。同时&#xff0c;由于采集设备和环境中存在电流的变化&#xff0c;产生电磁发射等物理现象&#xff0c;会对心电…

学习测试7-ADB的使用

ADB是什么&#xff1f; ADB&#xff0c;即 Android Debug Bridge&#xff08;安卓调试桥&#xff09; 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具&#xff0c;它可为各种设备操作提供便利&#xff0c;如安装和调试应用&#xff0c;并提供对 Unix shell&…

最新全国1-5级标准河流水系矢量数据

2023最新全国一级&#xff5e;五级标准河流水系 shp 矢量数据 2023最新全国一级&#xff5e;五级标准河流水系 shp 矢量数据 Arcgis 五级河流水系全国合集和按省区分 坐标系&#xff1a;wgs84 更新年份&#xff1a;2023年 包含20230SM提取全国超详细水体 Arcgis 矢量数据&a…

AcWing 849. Dijkstra求最短路 I

给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为正值。 请你求出 11 号点到 n 号点的最短距离&#xff0c;如果无法从 1 号点走到 n 号点&#xff0c;则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…

Python从Excel表中查找指定数据填入新表

#读取xls文件中的数据 import xlrd file "原表.xls" wb xlrd.open_workbook(file) #读取工作簿 ws wb.sheets()[0] #选第一个工作表 data [] for row in range(7, ws.nrows): name ws.cell(row, 1).value.strip() #科室名称 total1 ws.cell(row, 2…