【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象

news2024/10/6 20:31:49

文章目录

  • 请求
  • 1. 传递单个参数
    • 注意事项
      • 1 . **正常传递参数**
      • 2 . **不传递 age 参数**
      • 3 . **传递参数类型不匹配**
  • 2. 传递多个参数
  • 3. 传递对象

请求

访问不同的路径,就是发送不同的请求。在发送请求时,可能会带一些参数,所以学习 Spring 的请求,主要是学习如何传递参数到后端,以及后端如何接收

传递参数,我们主要是使用浏览器和 Postman 来模拟

后端开发人员无需太过于关注如何传递参数,了解即可,实际开发中以 Postman 测试为主
比如餐厅的厨师,不关注用户是在店里下单还是外卖平台下单,只需要知道如何让接受订单,根据订单做出对应的菜肴就可以了

1. 传递单个参数

接受单个参数,在 Spring MVC 中直接用方法中的参数就可以,比如以下代码:

import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  
  
@RequestMapping("/param")  
@RestController  
public class UserController {  
  
    @RequestMapping("/m1")  
    public String method1(String name) {  
        return "接收到参数:name="+name;  
    }  
}
  • 咱们使用浏览器发送请求并传参:
    http://127.0.0.1:8080/param/m1?name=spring image.png|503

可以看到,后端程序正确拿到了 name 参数的值。Spring MVC 会根据方法的参数名,找到对应的参数,赋值给方法 image.png
如果参数不一致,是获取不到参数的,比如请求 URL:
http://127.0.0.1:8080/param/m1?name1=spring ,响应结果:image.png|523


注意事项

使用基本类型来接收参数时,参数必须传(除 boolean 类型),否则会报 500 错误;类型不匹配时,会报 400 错误

@RequestMapping("/m1/int")  
public String method1GetInt(int age) {  
    return "接收到参数:age="+age;  
}

1 . 正常传递参数

http://127.0.0.1:8080/param/m1/int?age=18
浏览器响应情况:image.png|475
通过 Fiddler 观察请求和响应,HTTP 响应状态码为 200Content-Typetext/htmlimage.png


2 . 不传递 age 参数

http://127.0.0.1:8080/param/m1/int
浏览器响应情况:image.png
通过 Fiddler 观察请求和响应,HTTP 响应状态码为 500image.png
尝试观察程序的错误日志,并解决问题:image.png
一般看日志堆栈信息的首行,报错信息显示:
int 类型的参数‘ age ’,虽然为可选的,但由于被声明为基本类型而不能被转换为空值。考虑将其声明为对应基本类型的包装类型

包装类型可以为 null,当把类型变成 Integer 之后:image.png|401

  • 对于包装类,如果不传对应参数,Spring 接收到的数据则为 null。所以企业开发中,对于参数可能为空的数据,建议使用包装类型

3 . 传递参数类型不匹配

http://127.0.0.1:8080/param/m1/int?age=abc
image.png|449
通过 Fiddler 观察请求和响应,HTTP 响应状态码为 400image.png


2. 传递多个参数

如何接收多个参数呢?
和接收单个参数一样,直接使用方法的参数接收即可。使用多个形参

@RequestMapping("/m2")  
public String method2(String name, String password) {  
    return "接收到参数:name=" + name + ", password=" + password;  
}
  • 可以看到,后端程序正确拿到了 namepassword 参数的值 image.png
    当有多个参数的时候,前后端进行参数匹配的时候,是以参数的名称进行匹配的,因此参数的位置是不影响后端获取参数的结果image.png|559

3. 传递对象

如果参数比较多时,方法声明就需要有很多形参,并且后续每次新增一个参数,也需要修改方法声明。我们不妨把这些参数封装为一个对象。

Spring MVC 也可以自动实现对象参数的赋值,比如 Person 对象:

public class Person {  
    private int id;  
    private String name;  
    private String password;  
  
    public int getId() {  
        return id;  
    }  
  
    public void setId(int id) {  
        this.id = id;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getPassword() {  
        return password;  
    }  
  
    public void setPassword(String password) {  
        this.password = password;  
    }  
  
    @Override  
    public String toString() {  
        return "Person{" +  
                "id=" + id +  
                ", name='" + name + '\'' +  
                ", password='" + password + '\'' +  
                '}';  
    }  
}

对象传递代码实现:

@RequestMapping("/m3")  
public Object method3(Person person) {  
    return person.toString();  
}
  • 使用浏览器发送请求并传参:image.png
  • 可以看到,后端程序正确拿到了 Person 对象里面的各个属性的值
    Spring 会根据参数名称自动绑定到对象的各个属性上,如果某个属性未传递,则赋值 null(基本类型则赋值为默认初始值,比如 int 类型的属性,会被复赋值为 0)

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

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

相关文章

习题5 循环

选择题 1、如下程序的运行结果为 【 正确答案: B】。 A.9 B.8 C.7 D.6 2、C语言的for语句中的表达式可以部分或全部省略,但两个 【 正确答案: C】不能省略。 但当三个表达式均省略后,因缺少判断条件&#xff0…

构建llama.cpp并在linux上使用gpu

使用gpu构建llama.cpp 更多详情参见https://github.com/abetlen/llama-cpp-python,官网网站会随着版本迭代更新。 下载并进入llama.cpp 地址:https://github.com/ggerganov/llama.cpp 可以下载到本地再传到服务器上 git clone https://github.com/gg…

AI特征工程-如何缓解模型过拟合

一、什么是模型过拟合? 1、举个例子 如上图第三个模型解释为出现了过拟合现象,过度的拟合了训练数据,而没有考虑到泛化能力,从而在新数据上表现不佳。 二、如何确定模型过拟合了 我们通常没有办法直观的看到过拟合。通常有以下几…

【数据分享】2000—2023年我国省市县三级逐年植被覆盖度(FVC)数据(Shp/Excel格式)

之前我们分享过2000—2023年逐月植被覆盖度(FVC)栅格数据(可查看之前的文章获悉详情)和Excel和Shp格式的省市县三级逐月FVC数据(可查看之前的文章获悉详情),原始的逐月栅格数据来源于高吉喜学者…

【Python】Python知识总结浅析

Python是一种高级编程语言,由Guido van Rossum于1991年首次发布。它以简洁的语法和强大的功能著称,适用于多种应用场景,包括Web开发、数据分析、人工智能、自动化脚本等。 易于学习和使用:Python的语法简洁明了,适合初…

信息安全工程师(36)访问控制主要产品与技术指标

前言 访问控制是确保系统资源安全的重要手段,其主要产品和技术指标对于理解和实施有效的访问控制策略至关重要。 一、访问控制主要产品 访问控制产品种类繁多,根据应用场景和需求的不同,可以分为以下几类: 防火墙: 功能…

【C语言】VS调试技巧

文章目录 什么是bug什么是调试(debug)debug和releaseVS调试快捷键监视和内存观察编程常⻅错误归类 什么是bug bug本意是昆⾍”或“⾍⼦”,现在⼀般是指在电脑系统或程序中,隐藏着的⼀些未被发现的缺陷或问题,简称程序…

Pytorch基础:网络层

文章目录 1.卷积层-Convolution Layers1.1 1d/2d/3d卷积1.2卷积--nn.Conv2d1.3转置卷积(实现上采样) 2.池化层3.线性层—Linear Layer4.激活函数层—Activate Layer 1.卷积层-Convolution Layers 卷积运算:卷积运算在输入信号(图像)上滑动,相应位置上进行乘加. 卷积核:又称过滤…

java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码

java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码

Linux高级编程_30_管道

文章目录 管道作用:分类: 前置知识:复制文件描述符dupdup2 【推荐使用】 无名管道概述: pipe函数实现: ps -A | grep bash 有名管道:实现有名管道的聊天无名管道与有名管道的区别? 管道 作用:…

小红书算法岗面试,竞争太激烈了

最近已有不少大厂都在秋招宣讲了,也有一些在 Offer 发放阶段。 节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…

排版套料系统设计说明

先上效果图 项目地址 1.产品介绍 产品名称:StreamFit 智能排版套料系统 主要功能: 智能排版优化 功能描述:StreamFit 利用先进的算法技术,自动对各类材料(如布料、金属板材、纸张等)进行高效排版布局&am…

一次Mysql数据库活跃连接数高告警的排查方法

基础相关知识 在现代应用中,数据库的性能和稳定性直接影响到整个系统的运行情况。活跃连接数高的告警往往意味着数据库负载过重,可能会导致性能下降甚至服务不可用。 活跃连接数指的是当前与数据库建立连接并且处于活动状态的连接数量。 高活跃连接数…

阿里云百炼通义大模型接入流程,手把手教程

阿里云百炼通义大模型接入流程,即体验大模型、创建Agent应用和创建自训练大模型,阿里云百科aliyunbaike.com分享阿里云官网关于阿里云百炼通义大模型的接入流程: 阿里云百炼通义大模型接入流程 快速接入阿里云百炼通义大模型共分为三大步骤&a…

大模型客服的未来发展趋势

在当今数字化时代,大模型客服正以惊人的速度改变着客户服务的格局。随着技术的不断进步,大模型客服的未来发展趋势充满了无限可能。随着人工智能技术的快速发展,智能客服领域正迎来一场前所未有的变革。大模型客服作为其中的重要分支&#xf…

为什么营业执照显示经营异常

经营异常是怎么回事?是什么意思?1、年报未依照正常的时间公示或者某些要素没有公示;2、营业执照的地址与实际的地址不符,该地址联络不到人。经营异常不处理有什么后果?有什么影响?企业被列入工商异常一般会对公司的经营…

Maven的生命周期与依赖作用域介绍

说明:本文介绍Maven的生命周期,以及在pom.xml文件中每个依赖(dependency标签内)scope标签的内容。 Maven生命周期 在IDEA项目中,右侧边栏,点Maven,可以看到以下生命周期。 其中, c…

【AI知识点】偏差-方差权衡(Bias-Variance Tradeoff)

偏差-方差权衡(Bias-Variance Tradeoff) 是机器学习和统计学中的一个核心概念,描述了模型在训练数据和测试数据上的表现与模型复杂度之间的关系。它解释了为什么我们需要在模型复杂度和模型泛化能力之间做权衡,以避免模型出现欠拟…

数字化转型:企业竞争力提升的关键

在当今时代,数字化转型已成为企业发展的必然趋势。它不仅仅是技术的应用,更是一种战略思维的转变。 数字化转型的主要内容 1.业务流程数字化:通过引入信息技术,实现业务流程的自动化、智能化,提高业务流程的效率和准确…

科普篇 --- 什么是汽车中的API?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…