SpringBoot接参注解与校验失败后的三种异常

文章目录

  • 一、SpringBoot中的参数传递注解
    • 1、@PathVariable
    • 2、@RequestParam
    • 3、@RequestBody
    • 4、不用注解或者@ModelAttribute
  • 二、参数类型校验失败后的三种异常

一、SpringBoot中的参数传递注解

先看看非json下参数的接收和传递:

1、@PathVariable

@PathVariable注解用于从url来获取参数值。URL 中的 {xxx} 占位符可以通过 @PathVariable(“xxx“) 绑定到操作方法的入参中

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/testPathVariable/{id}/{name}")
    public Object testPathVariable(@PathVariable(value = "id") Integer id, @PathVariable(value = "name") String username){
		return null;
	}
}

这里不管是get还是post都一样,在路径传参:

在这里插入图片描述

2、@RequestParam

@PathValiable 是从 url 模板中获取参数值, 即这种风格的 url:http://localhost:8088/test/testPathVariable/{id}

@RequestParam 是从 request 表单里面获取参数值,即这种风格的 url: http://localhost:8088/test/testRequestparam?id=1

GET下的@RequestParam

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/testRequestParam")
    public Object testRequestParam(@RequestParam Integer id){
		return null;
	}
}

调用:

在这里插入图片描述

当然不是只能int、String,Map集合、数组都行:参考这里

 
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(@RequestParam Map<String, Object> map){
 
        return "图书: " + map.get("name") +  " 的作者为: " + map.get("author");
    }
}

在这里插入图片描述

@RequestParam注解可以设置value属性和required属性:

  • value设置前端传参时的参数名。@RequestParam(value = “name”) String username,这时前端传参名必须是name
  • required属性设置这个参数是否为必传,false时,默认给对应参数赋值null。注意如果参数是int类型,赋值null会报错

POST下的@RequestParam

假设此时需要从前端接受username和password:

@PostMapping("/testRequestParam")
    public Object testRequestParam(@RequestParam String username, @RequestParam String password){
        return null;
    }

调用:
在这里插入图片描述
但其实当要接收的参数较多的时候,这样一个个参数去写不合理,应该封装到一个dto类中,使用别的注解接参。接下来看json传参,用实体类(Dto类)接参的注解:


3、@RequestBody

@RequestBody注解用于POST请求上,接收json实体参数.

@PostMapping("/testRequestBody")
    public Object testRequestBody(@RequestBody AddUserDto dto) {
        
        return null;
    }

调用:
在这里插入图片描述

4、不用注解或者@ModelAttribute

刚才说到:controller层用实体类接收传参的时候,POST请求用@RequestBody注解,而GET请求,用dto实体类去接收前端传参时,是不加注解或者用@ModelAttribute

写法1:

@GetMapping("/testGetDto")
    public Object testGetDto( UserInfoDto dto) {
        
        return null;
    }

//接收到的username和password是实体中的属性,此时SpringBoot会帮我们自动填充到实体中

写法2:

@GetMapping("/testGetDto")
    public Object testGetDto(@ModelAttribute UserInfoDto dto) {
        
        return null;
    }

调用:

在这里插入图片描述

总结:

  • controller层使用基本数据类型来接参,用@PathVariable或者@RequestParam
  • controller层使用dto实体类接参,POST用@RequestBody,GET不用注解或者用@ModelAttribute

二、参数类型校验失败后的三种异常

日常开发中,常常在dto类的属性中使用注解进行参数合法性校验,如@NotNull、@Min,然后使用@Valid或者@Validated开启校验,当校验不通过时,抛出异常,由全局异常处理器去捕捉拦截处理。而不同的情况下,抛出的是不同类型的异常:

  • MethodArgumentNotValidException异常:@RequestBody(POST)接参验证失败后抛出
  • ConstraintViolationException异常: @RequestParam接参验证失败后抛出
  • BindException异常:GET中使用@ModelAttribute或者空注解接参,验证失败后抛出

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

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

相关文章

软件框架-实现使用@Component@Data@Configuration@Bean(配置类控制类实体类)等方法实现将配置文件从8080端口显示在网页上

一、前言 1.该程序代码是使用idea2021.12版本编写的&#xff0c;若使用其他软件请对照好配置&#xff1b; 2.这个程序具体的内容我忘了&#xff0c;只知道使用ComponentConfigurationPropertiesData ConfigurationBeanRestControllerAutowiredGetMapping等方法写的&#xff0…

chatGPT学英语,真香!!!

文章目录学习目标学习内容目标方式过程学习时间学习产出学习目标 能够在三个月的练习后&#xff0c;和真人外教比较流畅的沟通&#xff01; 最近chatGPT实在是太火了&#xff0c;各种事情都能干&#xff0c;能改论文、写代码和翻译。 看到B站很多教程教我们直接用chatGPT进行…

【数据库管理】②实例管理及数据库启动关闭

1. 实例和参数文件 1.1 instance 用于管理和访问 database. instance 在启动阶段读取初始化参数文件(init parameter files). 1.2 init parameter files [rootoracle-db-19c ~]# su - oracle [oracleoracle-db-19c ~]$ [oracleoracle-db-19c ~]$ cd $ORACLE_HOME/dbs [oracl…

Docker 翻脸,不再开源,期待后续

前几日&#xff0c;Docker Hub出了一件大事&#xff01;但凡创建了“organisation”的用户都收到了一封含有简短PDF链接的邮件。邮件的内容“金钱味”十足&#xff1a;如果不按照要求升级付费&#xff0c;用户就将失去对数据的访问权限。此举不仅会破坏开源项目的自动化构建&am…

GPT-4发布,这类人才告急,大厂月薪10W+疯抢

ChatGPT最近彻底火出圈&#xff0c;各行各业都在争相报道&#xff0c;甚至连很多官媒都下场“跟风”。ChatGPT的瓜还没吃完&#xff0c;平地一声雷&#xff0c;GPT-4又重磅发布&#xff01; 很多小伙伴瑟瑟发抖&#xff1a;“AI会不会跟自己抢饭碗啊&#xff1f;” 关于“如何…

C++ 16 vector容器

目录 一、vector容器 1.1 简介 1.2 构造函数 1.3 赋值操作 1.4 容量和大小 1.5 插入删除 1.6 数据存取 1.7 互换容器 1.8 预留空间 一、vector容器 1.1 简介 ① vector数据结构和数组非常相似&#xff0c;也称为单端数组。 ② vector与普通数组区别&#xff1a;不同…

6.链路层和局域网

链路层链路层的主体是网络适配器&#xff0c;也称为网络接口卡2. 变换局域网链路层交换机的任务是在主机和路由器之间承载数据报没有两个适配器有相同的MAC地址适配器到哪里&#xff0c;MAC地址都不会改变主机移动时&#xff0c;主机的IP地址需要随之改变&#xff0c;以改变连接…

Vue+springboot 高校图书馆座位预约选座系统java毕业设计项目推荐

目前现有的图书馆选座管理系统对于用户而言其选座管理流程仍然过于繁琐&#xff0c;对于图书馆选座管理而言其系统安全性并不能保障。同时整套系统所使用的技术相对较为落后&#xff0c;界面不能动态化展示。相比较于其它同类型网站而言不能体现技术先进性。 1.2 项目目标 图书…

Python视频软件解析教程【源码可送】

人生苦短&#xff0c;我用python 快放假了… 有的人出去玩~ 有的人在家里呆着看电视~ 这次就来康康怎么做一个好玩的小软件~ &#xff08;嘘~自己用&#xff09; 瓜子花生小零食准备好了吗&#xff1f; 效果展示 我们先看看效果 这是本次要写的界面 主流视频都可以看&…

JDK20正式发布了GA版本,短期维护支持,以及JDK21预览

最近&#xff0c;Oracle发布了JDK20&#xff0c;相比对于Java开发者来说&#xff0c;JDK的发版是比较收关注的事情了&#xff0c;小简也来和大家一起了解了解JDK20发生了什么变化呢&#xff1f; 首先&#xff0c;JDK20是一个短周期版本&#xff0c;有6个月的维护时间&#xff0…

Maven和Gradle的区别

首先谈谈为什么要学习Maven&#xff1f; 依赖管理 大家还记得在学习JavaWeb时需要向web项目中引入少许jar包嘛&#xff1f;还记得引入jar包的繁琐过程嘛&#xff1f;实际项目中可能光基座需要引入的jar包就成千上万&#xff0c;jar包从哪里获取也是一个问题。项目中的jar包不仅…

ChatGPT写作文章-快速使用ChatGPT不用注册方式

如何更好地使用ChatGPT批量生成文章&#xff1a;详细教程 作为一款强大的文本生成器&#xff0c;ChatGPT可以帮助您快速、高效地批量生成文章。但如果您还不知道如何更好地使用ChatGPT&#xff0c;那么这篇详细的列表教程将会指导您如何使用它来生成高质量的文章&#xff0c;提…

“工业转型,大势所趋”:ITES深圳工业展暨阿里巴巴1688工业采购节开幕

2023年以来&#xff0c;中国制造业快速发展、需求深度释放&#xff0c;创造了大量的产业机遇。与此同时&#xff0c;国内外社会经济发展不确定因素众多&#xff0c;制造类企业、专业买家呼唤提升发展确定性&#xff1b;面临时代变局&#xff0c;工业品市场渴望在发展模式、合作…

华为OD机试题,用 Java 解【删除指定目录】问题 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:删除指定目录 题目 某文件系统…

JDK 中用到了哪些设计模式?

以下是整理的⼏个在JDK 库中 常⽤的⼏个设计模式。桥接模式这个模式将抽象和抽象操作的实现进⾏了解耦&#xff0c;这样使得抽象和实现可以 独⽴地变化。 在Java 应⽤中&#xff0c;对于桥接模式有⼀个⾮常典型的例⼦&#xff0c;就是应⽤程序使⽤ JDBC 驱动程序进⾏开发的⽅式…

Node.js 中的线程 与 并发

Node.jsNode.js 中的线程 与并发jcLee95 &#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/129784985 目 录1. JavaScript 与线程1.1 Java…

8种特“坑”的 SQL 写法,性能降低100倍

给大家分享几个SQL常见的“坏毛病”及优化技巧。 SQL语句的执行顺序&#xff1a; 1、LIMIT 语句 分页查询是最常用的场景之一&#xff0c;但也通常也是最容易出问题的地方。比如对于下面简单的语句&#xff0c;一般 DBA 想到的办法是在 type、 name、 create_time 字段上加组…

春分-面试

青岛 zc&#xff1a; 1.String的类型 string、stringbuilder 、stringbuffer&#xff1f; String不可变、另外两个可变、StringBuilder线程不安全、但是效率高、并且String不能被继承。 JVM是C写的编译后的机器码&#xff0c; 2.集合类的用法&#xff0c;还问了键值对。key如果…

06solr 文件删除

文章目录 0x01 漏洞介绍0x02 影响版本0x03 漏洞环境0x04 漏洞复现0x05 修复建议摘抄免责声明0x01 漏洞介绍 Apache Solr 存在任意文件删除漏洞,在目前的最新版本(8.8.2)中仍然未被修复,漏洞的根本成因是函数 **Files.deleteIfExists()**对要删除的文件名并未做校验。同时 Apa…

小程序面试题(day07)

文章目录前言微信小程序自定义tabbar的理解&#xff1f;微信小程序怎么缓存数据&#xff1f;微信小程序怎么进行网络请求&#xff1f;微信小程序路由跳转以及传参如何实现&#xff1f;微信小程序生命周期的理解&#xff1f;微信小程序模块化&#xff1f;微信小程序所有api放在哪…