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.mfbz.cn/a/783359.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7下安装Doris

Doris简介 Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以高效、简单、统一的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的复杂分析场…

新时代【机器学习】与【Pycharm】:【随机数据生成】与智能【股票市场分析】

目录 第一步&#xff1a;准备工作 1.1 安装必要的库 小李的理解&#xff1a; 1.2 导入库 小李的理解&#xff1a; 第二步&#xff1a;生成和准备数据 2.1 生成随机股票数据 小李的理解&#xff1a; 2.2 数据探索与可视化 小李的理解&#xff1a; 2.3 数据处理 小李…

谷粒商城学习笔记-18-快速开发-配置测试微服务基本CRUD功能

文章目录 一&#xff0c;product模块整合mybatis-plus1&#xff0c;引入依赖2&#xff0c;product启动类指定mapper所在包3&#xff0c;在配置文件配置数据库连接信息4&#xff0c;在配置文件中配置mapper.xml映射文件信息 二&#xff0c;单元测试1&#xff0c;编写测试代码&am…

MySQL学习记录 —— 십칠 CentOS7.9环境下的MySQL8.4 安装和配置

文章目录 1、安装和配置2、MySQL 包位置3、主要程序介绍 本篇开始在之前mysql博客的基础上继续延伸&#xff0c;适合有一定基础的mysql使用者阅读 环境 &#xff1a;CentOS 7.9 root 用户&#xff0c;MySQL 8.4 1、安装和配置 看一下当前系统版本 cat /etc/redhat-release应当…

项目收获总结--MyBatis的知识收获

一、概述 最近几天公司项目开发上线完成&#xff0c;做个收获总结吧~ 今天记录MyBatis的收获和提升。 二、获取自动生成的(主)键值 insert 方法总是返回一个 int 值 &#xff0c;这个值代表的是插入的行数。若表的主键id采用自增长策略&#xff0c;自动生成的键值在 insert…

ubuntu软件源的两种格式和环境变量

1. ubuntu的/etc是什么目录&#xff1f; 在Ubuntu操作系统中&#xff0c;/etc/是一个特殊的目录&#xff0c;它包含系统的配置文件。这些配置文件用于设置各种系统和应用程序的参数和选项。 一般来说&#xff0c;用户可以在这个目录下找到各种重要的配置文件&#xff0c;如网络…

Leetcode—93. 复原 IP 地址【中等】

2024每日刷题&#xff08;140&#xff09; Leetcode—93. 复原 IP 地址 实现代码 class Solution { public:vector<string> restoreIpAddresses(string s) {vector<string> ans;vector<string> path;function<void(int)>dfs [&](int start) {if…

robotframework+python接口自动化的点滴记录

在robotframeworkpython框架上写了两三天的接口自动化&#xff0c;做了一些笔记。 1.在断言的时候经常由于数据类型导致较验不通过&#xff0c;值得注意的是&#xff0c;在定义常量或者变量的时候&#xff0c;使用${}代表int类型&#xff0c;例如${2}就代表数字2&#xff0c;另…

E - Tree and Hamilton Path 2

算出所有路径之和2减去树的直径 #include <bits/stdc.h> using namespace std; typedef long long ll; const int N2e610; ll n,ans; ll e[N],h[N],idx,w[N],ne[N],dis[N]; void add(ll a,ll b,ll c){ e[idx]b,ne[idx]h[a],w[idx]c,h[a]idx; } ll c; void dfs(ll u,…

23款奔驰S400升级原厂后排电动座椅调节有哪些功能

奔驰 S400 商务版升级后排电动座椅后&#xff0c;通常会具备以下功能&#xff1a; • 电动调节功能&#xff1a;可以通过按钮或控制面板来调节座椅的前后、上下、倾斜等位置&#xff0c;以获得最佳的舒适度。 • 座椅加热功能&#xff1a;在寒冷的天气中&#xff0c;座椅加热…

云渲染平台那个好?2024云渲染测评

1.渲染100&#xff08;强烈推荐&#xff09; 以高性价比著称&#xff0c;是预算有限的小伙伴首选。 15分钟0.2,60分钟内0.8;注册填邀请码【5858】可领30元礼包和免费渲染券) 提供了多种机器配置选择(可以自行匹配环境)最高256G大内存机器&#xff0c;满足不同用户需求。支持…

自然语言处理领域介绍及其发展历史

自然语言处理领域介绍及其发展历史 1 NLP2 主要任务3 主要的方法1 基于规则的方法&#xff08;1950-1980&#xff09;2 基于统计的方法&#xff08;传统的机器学习的方法&#xff09;3 Connectionist approach&#xff08;Neural networks&#xff09; 1 NLP 自动的理解人类语…

uniapp父页面调用子页面 组件方法记录

文章目录 导文如何点击父页面&#xff0c;触发子页面函数先写一个子页面的基础内容父元素 如何点击父页面&#xff0c;修改子页面的值先写一个子页面的基础内容父元素 导文 如何点击父页面&#xff0c;触发子页面函数&#xff1f; 如何点击父页面&#xff0c;修改子页面的值&am…

jvisualvm工具使用--添加远程监视

jvisualvm简介 jvisualvm该工具位于jdk的bin目录下&#xff0c;是jdk自带的可用于监控线程、内存情况、查看方法的CPU时间和内存中的对 象、已被GC的对象、反向查看分配的堆栈等&#xff0c;即&#xff1a;Java虚拟机监控、故障排查及性能分析工具。 远程监控方法 以windows端…

最小二乘法实践

食堂饭菜价格表如下图所示&#xff0c;采用最小二乘法估算荤菜、素菜、米饭的价格构成&#xff0c;增加一条记录&#xff0c;两荤22元。 提取训练数据&#xff1a; x z 12 y z 14 2x z 22 x y z 18 x 2y z 23 2x y z 26 3x y z 36 代码如下&#xff1a; i…

事件mousePressEvent、paintEvent、closeEvent、keyPressEvent】

事件 mousePressEvent、paintEvent、closeEvent、keyPressEvent 鼠标样式的设置 按WSAD通过keyPressEvent事件移动按钮 通过事件mousePressEvent获取鼠标位置的相对位置&#xff0c;绝对位置 cusor 鼠标样式设置成十字星 .h #ifndef DEFAULTHANDLEREXAMPLE_H #define DEFAUL…

01:单片机开发前的准备工作

单片机开发前的准备工作 1、 开发环境的安装2、创建工程和文件3、编译代码4、下载到单片机 1、 开发环境的安装 第一步&#xff1a;安装KEIL开发软件&#xff0c;按照如下步骤按照软件 第二步&#xff1a;注册KEIL软件 2、创建工程和文件 第一步&#xff1a;先在F盘创建一个文…

取得了PMP证书后有哪些优势?不清楚的快来看!

拿到PMP证书后&#xff0c;个人可以享受到一系列的福利&#xff0c;这些福利主要包括但不限于以下几个方面&#xff1a; 职业发展优势 PMP证书是项目管理领域的全球权威认证&#xff0c;能证明持证者具备系统的项目管理知识和经验。在求职和职业发展过程中&#xff0c;PMP证书…

【基础算法总结】分治—归并

分治—归并 1.排序数组2.交易逆序对的总数3.计算右侧小于当前元素的个数4.翻转对 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.排序数组 …

阶段三:项目开发---民航功能模块实现:任务18:指挥航空公司架次与延误率占比

任务描述 内 容&#xff1a;在前面的“使用Spark清洗统计业务数据并保存到数据库”任务中&#xff0c;已经通过Spark Streaming 清洗程序&#xff0c;将Kafka中Topic为“task_Aftn”的报文数据&#xff0c;经过数据清洗后&#xff0c;保存到了MySQL数据库中&#xff1b;本节任…