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

本文主要是介绍SpringBoot——请求响应(简单参数、实体参数、数组集合参数、日期参数、JSON参数、路径参数、统一响应结果),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉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;@Overridepublic 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;@Overridepublic 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);}@Overridepublic 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

在这里插入图片描述


这篇关于SpringBoot——请求响应(简单参数、实体参数、数组集合参数、日期参数、JSON参数、路径参数、统一响应结果)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116956

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志