SpringBoot请求响应

简单参数

1. 原始方式获取请求参数

Controller方法形参中声明httpServletRequest对象
调用对象的getParameter参数名

@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";}}

2.SpringBoot中接受简单参数

请求参数名与方法形变量名相同
自动进行类型转换

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

3.RequestParam注解

如果遇到参数名称不匹配的问题,可以用@RequestParam进行映射
注意,当启用了RequestParam,你需要知道RequestParam的required属性默认是true,代表请求参数必须传递,如果不传递可能会报错
防止报错,可以将required=false;

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

测试

我测试的工具是用的Postman,走Get和Post都可以

GET,在响应头上传递参数
在这里插入图片描述

POST,在响应体上传递参数
在这里插入图片描述

实体参数

请求规则:请求参数名与形参对象属性名称保持相同,即可直接通过POJO接收。

1.简单实体对象

简单参数定义一个两个还好(比如我定义用户名、密码),但是如果针对用户信息存在比较密集的参数,可能不太容易进行响应和请求。
为了解决这个问题,可以把信息都封装到实体参数中。

首先我们需要在java中做好封装,我们在com.ztt.Pojo包下封装一个User类,其中实现好私有变量的Get和Set方法以及toString方法。

package com.ztt.Pojo;public class User {private String name;private Integer age;public void setName(String name){this.name = name;}public void setAge(Integer age){this.age = age;}public Integer getAge(){return this.age;}public String getName(){return this.name;}@Overridepublic String toString(){return "User{"+"name="+name+"age="+age;}}

在RequestController中定义好方法

import com.ztt.Pojo.User;  //记得给User引用@RestController
public class RequestController {@RequestMapping("/simplePojo")public String simplePojo(User user){System.out.println(user);return "OK";}}

调试通过
在这里插入图片描述

2.复杂实体对象

我们这个实体对象不仅有String和Integer,还引入一个address.
在这里插入图片描述
首先新建Address类,包含了私有变量city和province,以及对应的set、get和toString方法。

package com.ztt.Pojo;public class Address {private String city;private  String province;public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}@Overridepublic String toString() {return "Address{" +"city='" + city + '\'' +", province='" + province + '\'' +'}';}
}

在User类中新加入Address以及其相关的set和get方法


package com.ztt.Pojo;public class User {private String name;private Integer age;private Address address;public void setName(String name){this.name = name;}public void setAge(Integer age){this.age = age;}public Integer getAge(){return this.age;}public String getName(){return this.name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +", address=" + address +'}';}
}

在RequestController中定义请求方法(其实和简单实体参数的请求一样、基本上不用变)

import com.ztt.Pojo.User;  //记得给User引用@RestController
public class RequestController {@RequestMapping("/complexPojo")public String complexPojo(User user){System.out.println(user);return "OK";}}

利用Postman发送请求(返回OK)
在这里插入图片描述

数组参数

使用场景:比如使用多选框进行多目标选取。
在这里插入图片描述
接收方式可以采用数组接受,也可以选择集合接受。

@RestController
public class RequestController {// 数组进行集合的封装@RequestMapping("/arrayParam")public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK";}// 利用集合进行参数的封装// 使用集合封装时,需要采用@RequestParam对形参定义,因为默认集合是封装到数组类型中的@RequestMapping("/listParam")public String arrayParam(@RequestParam List<String> hobby){System.out.println(hobby);return "OK";}
}

在这里插入图片描述

日期参数

由于日期记录的形式比较丰富,所以在日期参数传递的过程中,需要使用@Dat 注解进行日期参数格式转换。

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

注:如果时间格式不匹配就会出现这样的错误:
Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type ‘java.lang.String’ to required type ‘java.time.LocalDateTime’; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime] for value [2023-8-11 10:06:54]; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2023-8-11 10:06:54]]

在这里插入图片描述

JSON参数

JSON参数中JSON数据键名与形参对象属性名保持一致,定义POJO类型形参可以接受参数,同时需要使用@RequestBody标识。

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

POST中数据体
{
“name”:“张三”,
“age”:10,
“address”:{
“province”:“beijing”,
“city”:“北京”
}
}

Postman中发送格式

在这里插入图片描述

路径参数

路径参数的请求直接通过URL传递参数
在java中可以通过占位符{…}来标识路径参数,通过@PathVariable获取路径参数.
使用写死的方法也可以,只不过占位符的方法更灵活一些。

@RestController
public class RequestController {// 简单参数请求@RequestMapping("/path/{id}")public String urlParam(@PathVariable Integer id){System.out.println(id);return "OK";}// 复杂参数请求@RequestMapping("/path/{id}/{name}")public String urlParam2(@PathVariable Integer id,@PathVariable String name){System.out.println(id);System.out.println(name);return "OK";}
}

请求方式可以直接在浏览器输入路径

http://localhost:8080/path/100
http://localhost:8080/path/1/Tom
(PS:用postman发送也可以)

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

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

相关文章

Pytorch源码搜索与分析

PyTorch的的代码主要由C10、ATen、torch三大部分组成的。其中&#xff1a; C10 C10&#xff0c;来自于Caffe Tensor Library的缩写。这里存放的都是最基础的Tensor库的代码&#xff0c;可以运行在服务端和移动端。PyTorch目前正在将代码从ATen/core目录下迁移到C10中。C10的代…

12-数据结构-数组、矩阵、广义表

数组、矩阵、广义表 目录 数组、矩阵、广义表 一、数组 二.矩阵 三、广义表 一、数组 这一章节理解基本概念即可。数组要看清其实下标是多少&#xff0c;并且二维数组&#xff0c;存取数据&#xff0c;要先看清楚是按照行存还是按列存&#xff0c;按行则是正常一行一行的去读…

学习Vue:slot使用

在Vue.js中&#xff0c;组件高级特性之一是插槽&#xff08;Slots&#xff09;。插槽允许您在父组件中插入内容到子组件的特定位置&#xff0c;从而实现更灵活的组件复用和布局控制。本文将详细介绍插槽的使用方法和优势。 什么是插槽&#xff1f; 插槽是一种让父组件可以向子…

AIF360入门教学

1、AIF360简介 AI Fairness 360 工具包(AIF360)是一个开源软件工具包&#xff0c;可以帮助检测和缓解整个AI应用程序生命周期中机器学习模型中的偏见。在整个机器学习的过程中&#xff0c;偏见可能存在于初始训练数据、创建分类器的算法或分类器所做的预测中。AI Fairness 360…

OPENCV C++(十一)

鼠标响应函数 //鼠标响应函数 void on_mouse(int EVENT, int x, int y, int flags, void* userdata) {Mat hh;hh *(Mat*)userdata;switch (EVENT){case EVENT_LBUTTONDOWN:{vP.x x;vP.y y;drawMarker(hh, vP, Scalar(255, 255, 255));//circle(hh, vP, 4, cvScalar(255, 255…

人工智能在监控系统中的预测与优化:提升效率和响应能力

引言&#xff1a;人工智能的发展给监控系统带来了新的可能性&#xff0c;通过分析历史监控数据和其他相关数据&#xff0c;人工智能可以预测未来可能发生的事件&#xff0c;如交通拥堵、安全隐患等&#xff0c;并帮助优化监控系统的配置和资源分配。这种预测和优化的能力可以提…

2023年国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

vue3表格,编辑案例

index.vue <script setup> import { onMounted, ref } from "vue"; import Edit from "./components/Edit.vue"; import axios from "axios";// TODO: 列表渲染 const list ref([]); const getList async () > {const res await ax…

6.2.0在线编辑:GrapeCity Documents for Word (GcWord) Crack

GrapeCity Word 文档 (GcWord) 支持 Office Math 函数以及转换为 MathML GcWord 现在支持在 Word 文档中创建和编辑 Office Math 内容。GcWord 中的 OMath 支持包括完整的 API&#xff0c;可处理科学、数学和通用 Word 文档中广泛使用的数学符号、公式和方程。以下是通过 OMa…

无法在 macOS Ventura 上启动 Multipass

异常信息 ➜ ~ sudo multipass authenticate Please enter passphrase: authenticate failed: Passphrase is not set. Please multipass set local.passphrase with a trusted client. ➜ ~ multipass set local.passphrase Please enter passphrase: Please re-enter…

大语言模型LLM的一些点

LLM发展史 GPT模型是一种自然语言处理模型,使用Transformer来预测下一个单词的概率分布,通过训练在大型文本语料库上学习到的语言模式来生成自然语言文本。 GPT-1(117亿参数),GPT-1有一定的泛化能力。能够用于和监督任务无关的任务中。GPT-2(15亿参数),在生成方面表现出很…

vue自定义指令--动态参数绑定

在企业微信侧边栏应用中&#xff0c;给dialog添加了拖拽功能&#xff0c;但是因为dialog高度超过了页面高度&#xff0c;所以高度100%时拖拽有个bug--自动贴到窗口顶部而且企业侧边栏宽高都有限制&#xff0c;拖拽效果并不理想&#xff0c;所以就想缩小dialog再进行拖拽。 拖拽…

IntelliJ IDEA和Android studio怎么去掉usage和作者提示

截止到目前我已经写了 600多道算法题&#xff0c;其中部分已经整理成了pdf文档&#xff0c;目前总共有1000多页&#xff08;并且还会不断的增加&#xff09;&#xff0c;大家可以免费下载 下载链接&#xff1a;https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ 提取码&#xf…

java处理CSV文件

文章目录 1. 方法2. maven依赖3. 示例代码 1. 方法 opencsv–>CSVParser&#xff1b;commons-csv–>CSVReader&#xff1b;有时候文本里有逗号可能会导致错误分割 2. maven依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>…

457. 环形数组是否存在循环

457. 环形数组是否存在循环 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;经验吸取 原题链接&#xff1a; 457. 环形数组是否存在循环 https://leetcode.cn/problems/circular-array-loop/description/ 完成情况&#xff1a; 解题思路…

使用Pandas进行数据清理的入门示例

数据清理是数据分析过程中的关键步骤&#xff0c;它涉及识别缺失值、重复行、异常值和不正确的数据类型。获得干净可靠的数据对于准确的分析和建模非常重要。 本文将介绍以下6个经常使用的数据清理操作&#xff1a; 检查缺失值、检查重复行、处理离群值、检查所有列的数据类型…

explicit关键字 和 static成员

explicit关键字 和 static成员 1、explicit 关键字2、static成员&#xff08;静态成员变量属于类的&#xff08;只有所属这个类的对象才能修改&#xff09;&#xff0c;不同于全局变量&#xff08;任何对象都能修改&#xff09;&#xff09;2.1 定义和性质2.2 静态成员的使用场…

opencv进阶02-在图像上绘制多种几何图形

OpenCV 提供了方便的绘图功能&#xff0c;使用其中的绘图函数可以绘制直线、矩形、圆、椭圆等多种几何图形&#xff0c;还能在图像中的指定位置添加文字说明。 OpenCV 提供了绘制直线的函数 cv2.line()、绘制矩形的函数 cv2.rectangle()、绘制圆的函数cv2.circle()、绘制椭圆的…

【Quarkus技术系列】「云原生架构体系」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?

云原生时代下的Java"拯救者" 在云原生时代&#xff0c;其实Java程序是有很大的劣势的&#xff0c;以最流行的spring boot/spring cloud微服务框架为例&#xff0c;启动一个已经优化好&#xff0c;很多bean需要lazy load的application至少需要3-4秒时间&#xff0c;内…

广西一公司泄露22万个人信息,被罚23万

近日&#xff0c;广西北海公安网安部门发现&#xff0c;北海某公司网站存在严重数据泄露问题&#xff0c;约22万个人信息数据已挂在暗网售卖。 经查&#xff0c;涉案公司主要提供网上咨询服务&#xff0c;在日常工作中收集了个人和企业等大量公民信息&#xff0c;但公司存放数…