SpringBoot——请求响应(简单参数、实体参数、数组集合参数、日期参数、JSON参数、路径参数、统一响应结果)

news2024/12/23 12:38:16

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

内容参考链接
Maven概念、IDEA集成、Maven坐标、依赖配置、依赖传递、排除依赖、依赖范围、生命周期

文章目录

    • 前言
    • 简单参数
      • 原始方式获取请求参数
      • SpringBoot 接收简单参数
      • @RequestParam 注解
    • 实体参数
    • 数组集合参数
    • 日期参数
    • JSON 参数
    • 路径参数
    • 统一响应结果
    • 总结

前言

大家好,这里是前端杂货铺。

本篇文章我们学习如何借助 SpringBoot 实现基本的请求和响应。


简单参数

原始方式获取请求参数

下面这个是比较原始的写法。

公共接口类 HttpServletRequest 继承自 ServletRequest。客户端浏览器发出的请求被封装成为一个 HttpServletRequest 对象。

通过 getParameter() 方法能拿到从浏览器端传递的参数。

package com.zahuopu.controller;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {
    @RequestMapping("/simpleParam")
    public String simpleParam(HttpServletRequest request) {
        String name = request.getParameter("name");
        String ageStr = request.getParameter("age");

        int age  = Integer.parseInt(ageStr);
        System.out.println(name + ":" + age);

        return "OK";
    }
}

接下来,在浏览器打开 http://localhost:8080/simpleParam?name=zahuopu&age=18 网址,或使用 postman / apipost 等接口测试工具测试:

浏览器查看:

接口测试工具查看:

在这里插入图片描述

idea 控制台输出:

在这里插入图片描述


SpringBoot 接收简单参数

我们既然都使用了 SpringBoot,当然可以使用它自带的一些写法(直接通过参数映射接收,此时需注意 请求参数名与方法形参变量名相同),接下来请看代码…

package com.zahuopu.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {
    @RequestMapping("/simpleParam")
    public String simpleParam(String name, Integer age) {
        System.out.println(name + ": " + age);
        return "OK";
    }
}    

在这里插入图片描述


@RequestParam 注解

当方法形参名称与请求参数名称不匹配时,我们可以通过 @RequestParam 注解完成映射。

该注解的 required 属性默认是 true,代表请求参数必须传递。可以手动改为 false,此时该属性可以不传递。

package com.zahuopu.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name = "name") String username, Integer age) {
        System.out.println(username + ": " + age);
        return "OK";
    }
}

在这里插入图片描述


实体参数

如果请求的参数太多,我们可以使用实体对象参数。

规则:请求参数名与形参对象属性名相同,即可直接接收。

下面我们看个小例子,我们创建一个 User 类,里面定义 name 和 age 属性,并添加 get set 方法并重写 toString() 方法。再创建一个 Address 类,存放省份和城市。具体代码如下…

com.zahuopu.controller.RequestController

package com.zahuopu.controller;

import com.zahuopu.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {
    @RequestMapping("complexPojo")
    public String complexPojo(User user) {
        System.out.println(user);
        return "OK";
    }
}

com.zahuopu.pojo.User

package com.zahuopu.pojo;

public class User {
    private String name;
    private Integer age;

    private Address address;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}

com.zahuopu.pojo.Address

package com.zahuopu.pojo;

public class Address {
    private String province;
    private String city;

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

接口测试工具

在这里插入图片描述

idea 打印的内容

在这里插入图片描述


数组集合参数

数组:请求参数名与形参中数组变量名相同,可以直接使用数组封装。

集合:请求参数名与形参中集合变量名相同,通过 @RequestParam 绑定参数关系。

package com.zahuopu.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

@RestController
public class RequestController {
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby) {
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }

    @RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> hobby) {
        System.out.println(hobby);
        return "OK";
    }
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


日期参数

使用 @DateTimeFormat 注解完成日期参数格式转换。

package com.zahuopu.controller;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

@RestController
public class RequestController {
    @RequestMapping("/dateParam")
    public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime) {
        System.out.println(updateTime);
        return "OK";
    }
}

在这里插入图片描述

在这里插入图片描述


JSON 参数

JSON 参数:JSON 数据键名与形参对象属性名相同,定义 POJO 类型形参即可接收参数,需要使用 @RequestBody 标识。

package com.zahuopu.controller;

import com.zahuopu.pojo.User;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user) {
        System.out.println(user.toString());
        return "OK";
    }
}

在这里插入图片描述

在这里插入图片描述


路径参数

通过请求 URL 直接传递参数,使用 {…} 来标识该路径参数,需要使用 @PathVariable 获取路径参数。

package com.zahuopu.controller;

import org.springframework.web.bind.annotation.*;

@RestController
public class RequestController {
    @RequestMapping("/path/{id}/{name}")
    public String pathParam(@PathVariable Integer id, @PathVariable String name) {
        System.out.println(id + ":" + name);
        return "OK";
    }
}

在这里插入图片描述

在这里插入图片描述


统一响应结果

@RestController 注解的底层实现其实是有好几个注解的。

@ResponseBody 的作用是将方法返回值直接响应,若返回值类型是 实体对象 / 集合,则转 JSON 格式响应。

在这里插入图片描述

统一响应结果:在响应数据时,我们可以封装一个类,进行处理响应数据。

com.zahuopu.pojo.Result.java

package com.zahuopu.pojo;

public class Result {
    private Integer code; // 1 成功 0 失败
    private String msg; // 提示信息
    private Object data; // 响应数据

    public Result() {
    }

    public Result(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public static Result success(Object data) {
        return new Result(1, "success", data);
    }

    public static Result success() {
        return new Result(1, "success", null);
    }

    public static Result error(String msg) {
        return new Result(0, msg, null);
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

com.zahuopu.controller.ResponseController.java

package com.zahuopu.controller;

import com.zahuopu.pojo.Address;
import com.zahuopu.pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class ResponseController {
    @RequestMapping("/hello")
    public Result hello() {
       return Result.success("Hello World!");
    }

    @RequestMapping("/getAddr")
    public Result getAddr() {
        Address addr = new Address();
        addr.setProvince("山东");
        addr.setCity("济南");
        return Result.success(addr);
    }

    @RequestMapping("/listAddr")
    public Result listAddr() {
        List<Address> list = new ArrayList<>();

        Address addr = new Address();
        addr.setProvince("山东");
        addr.setCity("济南");

        Address addr2 = new Address();
        addr2.setProvince("河南");
        addr2.setCity("郑州");

        list.add(addr);
        list.add(addr2);

        return Result.success(list);
    }
}

下面是各个请求响应的数据:

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


总结

本篇文章我们认识了 如何使用 SpringBoot 进行基本的请求响应操作。并认识了多种传参方式,包括简单参数、实体参数、数组集合参数、日期参数、JSON参数、路径参数等,并在最后进行了统一响应结果的封装处理!

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. JavaWeb开发(bilibili-黑马程序员)
  2. 菜鸟教程–Java

在这里插入图片描述


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

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

相关文章

(经验)SVN降版本,保留版本信息和用户信息。

背景&#xff1a;由于开始公司人数规模小&#xff0c;没有关心SVN最新版本免费对于用户数量限制要求不敏感&#xff0c;随着人数越来越多&#xff0c;公司来了新员工已经添加不了SVN需要注册码了&#xff0c;不利于SVN文件管理的在公司内部的推广。看了好多资料&#xff0c;都没…

Java:jdk8之后新增的时间API

文章目录 为什么要使用新增的API新增了哪些&#xff1f;Local常用方法代码一样的用法 黑马学习笔记 使用新增的 为什么要使用新增的API 新增了哪些&#xff1f; Local 常用方法 代码 package NewTime;import java.time.LocalDate;/*** Author: ggdpzhk* CreateTime: 2024-08-…

【Python入门思维概括图】

&#x1f4d6;入门思维概括图 ✅第1节 基础语法 ✅第2节 判断语句 ✅第3节 循环语句 ✅第4节 函数 ✅第5节 数据容器 ✅第6节 函数进阶 ✅第7节 文件操作 ✅第8节 异常模块和包 拓展&#xff1a;学了python能干什么&#xff0c;可以参考下面的Python使用场景思维导图介绍

慈云寺北里社区新时代文明实践站联手鼓动青春丰富青少年暑期生活

炎炎夏日的暑期&#xff0c;慈云寺北里社区新时代文明实践站携手鼓动青春&#xff0c;为社区青少年精心策划并成功举办了两场丰富多彩的暑期活动&#xff0c;不仅为孩子们的假期生活增添了浓厚的文化色彩&#xff0c;更激发了他们对中华传统文化与现代艺术的浓厚兴趣。 首场&am…

《JavaEE进阶》----4.<SpringMVC①简介、基本操作>

本篇博客讲解 MVC思想、及Spring MVC&#xff08;是对MVC思想的一种实现&#xff09;。 Spring MVC的基本操作、学习了六个注解 RestController注解 RequestMappering注解 RequestParam注解 RequestBody注解 PathVariable注解 RequestPart注解 MVC View(视图) 指在应⽤程序中…

IO复用技术

一、I/O复用的介绍 I/O复用是一种能够同时处理多个I/O操作的技术&#xff0c;适用于高并发场景。 使用场景 select/poll&#xff1a;适用于连接数较少的场景。epoll&#xff1a;适用于大规模的网络服务&#xff0c;如Web服务器。 二、实现方式 1.select select 是一种系统调…

iPhone突然黑屏?别慌,这里有你的自救指南

在日常使用iPhone的过程中&#xff0c;不少用户可能会遇到手机突然黑屏的情况&#xff0c;这往往让人措手不及。别担心&#xff0c;今天我们就来详细探讨一下iPhone突然黑屏的可能原因及解决方法&#xff0c;帮助你快速恢复手机的正常使用。 一、iPhone突然黑屏的可能原因 1. …

在做结果集封装时,若结果集表头与成员变量名不一致该如何解决?

目录 1. 通过别名映射为一致&#xff1a;as子句 2. 使用resultMap 3. 在配置文件中开启适配规则 在Score实体类中&#xff0c;我们定义了studentId、courseId、score、status&#xff0c;而在数据库中&#xff0c;我们设置如下&#xff1a; 1. 通过别名映射为一致&#xff1…

GAMES202——作业1 实时阴影(ShadowMap,PCF,PCSS)

目录 任务 ShadowMap PCF PCSS 实现 ShadowMap useShadowMap PCF findBlocker PCSS 结果 任务 ShadowMap 1.在 ShadowMaterial.js 中需要向 Shader 传递正确的 uLightMVP 矩阵&#xff0c;该矩阵参与了第一步从光源处渲染场景从而构造ShadowMap 的过程。 你需要完成 D…

4 - ZYNQ 信号、接口与引脚

文章目录 1 ZYNQ信号、接口与引脚1.1 电源引脚1.2 PS信号引脚1.3 PL信号引脚1.4 PS和PL交互接口 1 ZYNQ信号、接口与引脚 ZYNQ的信号、接口与引脚如下图所示&#xff0c;主要分为&#xff1a; PS部分PL部分PS和PL交互部分PS和PL共用部分&#xff08;如JTAG&#xff09; 1.…

Disassembly窗口信息解读

如上图程序所示&#xff0c;程序运行流程为&#xff1a; 1.跳转至main所在地址 2.加载全局变量counter地址??main_2到R0 3.将变量值存入R0 4.R0自增指令载入 5.加载counter地址到R1 6.通过R1的地址&#xff0c;R0取到counter的值 ??main_1最终结果R0存值&#xff0c…

常用工具网站之Emoji

https://www.emojiall.com/zh-hans/all-emojis 这个网站是一个收集和展示所有表情符号的网站。用户可以在这里找到各种不同类型的表情符号&#xff0c;并了解它们的含义和用法。 举例说明&#xff1a;在这个网站上&#xff0c;可以找到不同类型的奖牌表情符号&#xff0c;例如…

谈到这个痛点,写C的和不写C的码农都沉默了

声明&#xff1a;此篇为 ai123.cn 原创文章&#xff0c;转载请标明出处链接&#xff1a;https://ai123.cn/2246.html 作为一名在计算机软件行业工作的C工程师&#xff0c;我深知在高要求的内存管理环境中工作有多么艰难。内存分配与优化、避免内存泄漏&#xff0c;都是日常挑战…

Scrapy入门学习

文章目录 Scrapy一. Scrapy简介二. Scrapy的安装1. 进入项目所在目录2. 安装软件包Scrapy3. 验证是否安装成功 三. Scrapy的基础使用1. 创建项目2. 在tutorial/spiders目录下创建保存爬虫代码的项目文件3.运行爬虫4.利用css选择器Scrapy Shell提取数据例如: Scrapy 一. Scrapy…

2024谷歌开发者大会分享

前言&#xff1a; google一般会在每年的5月份在美国举行开发者大会&#xff0c;然后8-9月份会在中国也举办一次开发者大会&#xff0c;内容主题纲要是一致的&#xff0c;但是由于中国剧本的时间稍微晚一些&#xff0c;所以其内容会更新一些。 每年的开发者大会&#xff0c;会隐…

跟着B站前端面试总结回顾前端基础知识(二)

深拷贝与浅拷贝 在JavaScript中&#xff0c;深拷贝是一个常见的需求&#xff0c;特别是在处理复杂数据结构&#xff08;如对象、数组等&#xff09;时&#xff0c;需要确保原始数据不被修改。下面通过表格形式列出几种常见的深拷贝方法&#xff0c;并简要说明其优缺点。 方法…

【AI模型:追求全能还是专精?】

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 ​编辑 一&#xff1a;AI模型的全面评估和比较 二&#xff1a;AI模型的专精化和可扩展性…

宝塔安装yasd 远程调试 swoole

一、服务器安装yasd 1.安装yasd 按照官方文档&#xff0c;Yasd调试器官方文档 yum install boost boost-develgit clone https://github.com/swoole/yasd.gitcd yasdphpize --clean && phpize && ./configure --with-php-config/www/server/php/74/bin/php…

筛质数(线性筛法)

线性筛法&#xff1a; 假设有一个非质数 x&#xff0c;那么这个数可以被表示为一个最小质因数和一个因子相乘的形式 如 x 12 &#xff0c;那么 x 2*6 其中&#xff1a;2 就是 12 的最小质因数&#xff0c; 6 就是另一个因子 线性筛法就是利用每个数的最小质因数筛掉这个非…

做谷歌seo花钱多吗?

一分钱一分货&#xff0c;哪怕你是自己一个人做谷歌seo&#xff0c;服务器&#xff0c;域名的成本也是成本&#xff0c;当然&#xff0c;花费可能还少&#xff0c;但其中的时间精力&#xff0c;以及有没有效果&#xff0c;你大可自己掂量一下 你如果只是想随便做做&#xff0c;…