[排坑]Spring Boot @RequestParam的required=true但参数依然为null

@Autowired(required=false)注入注意的问题 1、前言在使用spring开发过程中,我们基本上都是使用@Autowired这个注解,用来注入已有的bean。但是有些时候,会注入失败。当我们加上参数(required=false)就能解决。今天整理一个我在实际开发中的例子2、required属性@Autowired(required=true):当使用@Autowired注解的时候,其实默认就是@Autowired(required=true)... 阅读详情

使用场景:

使用Spring Boot的@RequestParam注解时,我知道required的默认值是true,理论上来讲,被注解标注的参数如果为null,Spring Boot应该抛出异常。但实际上没有。

问题描述:

	
    public RestObjectResponse<xx> xxx(@RequestParam(value = "role")UserRole role) {
        return xxx;
    }

从上面的代码来看,如果role为null,应该会直接抛出异常,因此在内部的代码中我就没有校验role是否为null,但事实上null被传进来了。

原因分析:

作为常用的类型,比如Integer、String等,为null会抛出异常。我们这个是枚举类型,遇到这样的问题,我们先思考下面的三个问题

  • required=true是判断传入的url参数或body参数为空吗?
  • required=true是判断最终方法传入被RequestParam修饰的参数对象为空吗?
  • 是不是对枚举的序列化处理出现了什么问题

先分析枚举序列化

因为我自定义了枚举的序列化,但是在反序列化过程中直接返回的null值。这也应该是造成参数为null的根源。那么通过这个现象我们可以思考,required=true判断的可能仅仅是参数是否为null,当参数不为空,但在反序列化过程中产生的null,是不被检查的。

总结

为了保证required=true 的可信度,在反序列化时,不应该返回null,如果出现不能反序列化的情况,应该抛出异常。

Spring Boot 参数校验终极指南,写得太好了! 作为后端来讲,对于前端传来的数据,需要保持高度的警惕。避免出现异常数据,导致系统异常。统一参数校验和自定义校验注解,可以帮助我们更加优雅和严格的完成参数校验,减少出错的概率。/*** 账户名*/@Email(message = "邮箱格式有误")@NotBlank(message = "账户名称不能为空")@ApiModelProperty(notes = "账户名", required = true)随着业务的发展碰上了多语言,多区域,原本的参数错误提示语就不太够用了。 阅读详情

相关推荐

Spring Boot中@RequestParam的高级用法与实战技巧

HTTP请求参数处理是Web开发的基础环节,Spring框架通过@RequestParam注解实现了请求参数与方法参数的智能绑定。该注解不仅支持基础类型转换,还能处理多值参数、动态映射等复杂场景。从原理上看,Spring会通过参数解析器(ParameterResolver)自动完成字符串到目标类型的转换,这种机制大幅简化了Web层开发。在技术价值方面,@RequestParam通过required和defaultValue等属性增强了接口健壮性,配合List、Map等集合类型可以灵活应对各种业务需求。典型应

weixin_30697239的博客 399

@Autowired 中required = false和required = true 的区别

在 Spring 框架中,@Autowired注解用于自动注入依赖对象。@Autowired可以用在构造函数、方法、字段或者属性的 setter 方法上。该注解有一个可选属性required,它的默认值为true。required属性的设置会影响 Spring 在自动注入时的行为。以下是和。

qq_45872037的博客 2739

Spring Boot中@RequestParam的高阶用法与实战技巧

在Java Web开发中,HTTP请求参数处理是构建RESTful API的基础环节。Spring框架通过参数绑定机制,将请求参数自动映射到方法参数,极大提升了开发效率。作为核心注解之一,@RequestParam不仅支持基础类型绑定,还能处理集合、Map等复杂数据结构,结合默认值、Optional等特性可实现更健壮的参数处理逻辑。在微服务架构和前后端分离场景下,合理使用参数别名映射、动态参数接收等技巧,能有效解决接口兼容性问题。通过SpEL表达式和类型转换器,开发者可以扩展参数处理能力,满足报表生成、高级

weixin_34384557的博客 466

@RequestParam(required = true)的误区

先说结论:required = true是在前端没有传参数的时候报错,并不能防止参数为空。 考虑一下代码: @GetMapping("/userInfo") public void userInfo(@RequestParam(required = true) Integer id) { ... } 如果请求如下就会报400错误: http://localh...

couthz 2万+

Spring Boot @Controller 参数绑定:5种常见方式与 3 个实战避坑点

本文详细解析Spring Boot中@Controller参数绑定的5种核心方式,包括@RequestParam、@PathVariable、@RequestBody等,并提供3个实战避坑指南,帮助开发者高效处理日期格式化、嵌套对象绑定等常见问题。通过对比分析和完整示例,掌握Spring MVC参数绑定最佳实践。

weixin_30776545的博客 360

SpringBoot POST请求接收单个参数:@RequestParam、@RequestBody与@ModelAttribute方案详解

在Web开发中,HTTP请求参数绑定是后端处理客户端数据的基础环节。其核心原理在于服务器根据请求的Content-Type和预定义的解析策略,将数据映射到控制器方法的参数上。这一过程的技术价值在于实现了前后端数据的无缝对接,保证了接口的健壮性与可维护性。常见的应用场景包括表单提交、RESTful API交互以及文件上传等。本文聚焦于SpringBoot框架下,针对POST请求中接收单个参数这一常见但易混淆的需求,深入剖析了@RequestParam、@RequestBody和@ModelAttribute等

weixin_33861800的博客 544

表单验证 必填字段

表单验证 必填字段

qq_53926905的博客 1240

Spring Controller原理与最佳实践:从MVC设计到Spring Boot 3.x落地

Spring Controller是Spring MVC架构中承接HTTP请求的核心组件,其本质是MVC模式在Java Web中的工程化实现,通过DispatcherServlet、HandlerMapping与HandlerAdapter协同完成请求路由、参数绑定与响应渲染。它并非简单注解标记,而是承担协议适配、数据契约定义与入口守门职责的关键层。理解@Controller与@RestController的语义差异、@RequestParam/@PathVariable/@RequestBody的协议层级

weixin_33901926的博客 133

Spring MVC接收前端数组集合参数:原理、场景与避坑指南

在Web开发中,前后端数据交互是核心环节,其中参数绑定机制决定了数据如何从HTTP请求映射到后端代码。Spring MVC框架通过内置的数据绑定与类型转换系统,自动处理HTTP请求中的参数。其原理基于`ConversionService`,能够将查询字符串、表单数据或JSON请求体中的参数,智能转换为Java中的集合类型如`List`、`Set`或数组。这一技术价值在于极大提升了开发效率,保证了类型安全,并统一了参数处理逻辑。典型的应用场景包括接收批量操作的ID列表、多选过滤条件以及复杂嵌套的JSON数据。

weixin_34211761的博客 551

看完这篇爽文我终于学会了示波器(一)

示波器基础篇的介绍,希望对你有用,下次分享一下如何测试。

qq_45508321的博客 972

VisionMaster 4.2.0安装

按照顺序安装。

XuXing_java的专栏 3774

SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍

本文介绍了SpringMVC处理URL参数的三种常用注解:@PathVariable用于获取RESTful风格的路径参数;@RequestParam用于获取查询字符串参数,支持默认值和参数验证;@GetMapping作为组合注解简化GET请求映射。文章详细分析了各注解的使用方法、适用场景和常见问题解决方案,建议开发者根据具体需求选择或组合使用这些注解。通过合理运用这些注解,可以提升代码可读性、可维护性及接口健壮性。

ywl470812087的博客 12万+

手把手教你用u-center配置ublox GPS模块:从波特率到报文频率全流程

本文提供了一份详细的u-center软件配置ublox GPS模块的完整指南。从硬件连接到软件设置,逐步讲解了如何探测并设置正确的波特率、选择与启用关键的NMEA和UBX报文,以及配置输出频率。文章特别强调了配置固化的重要性,并分享了使用UBX协议进行高效数据解析等高级技巧,帮助开发者快速上手并优化GPS模块性能。

weixin_28285943的博客 894

Spring Boot 3.x参数解析问题解决方案

在Java Web开发中,参数解析是控制器处理HTTP请求的关键环节。Spring Boot框架通过HandlerMethodArgumentResolver机制实现灵活的参数绑定,其核心原理是将请求参数映射到方法参数。随着Spring Boot 3.x升级到Jakarta EE标准,参数解析机制发生了重要变化,这对开发者提出了新的要求。在实际工程中,正确处理参数绑定问题能显著提升API的可靠性和开发效率。常见场景包括基本类型参数接收、对象属性绑定和日期时间解析等。通过配置编译参数、使用正确注解和实现自定义

weixin_30781775的博客 295

深度学习驱动的股票波动率预测:LSTM和Transformer模型的实战解析

股票市场的波动率一直是金融领域关注的焦点之一。波动率预测对于风险管理、期权定价和资产配置至关重要。深度学习模型,如长短时记忆网络(LSTM)和Transformer,已经在时间序列数据分析领域取得了显著的成就。本博客将向您展示如何使用这两种深度学习模型来进行股票波动率预测,提供清晰的思路和相应的Python代码,以帮助您理解和应用这一重要任务。

斌擎科技 972

LeRobot 入门教程(九)使用 Android、iOS 手机控制机械臂

本指南详细介绍了如何使用iOS/Android手机远程控制机器人。内容包括:1)安装依赖(pip install leroobot[phone]);2)平台支持说明(iOS需HEBI Mobile I/O应用/Android用WebXR);3)手机方向校准方法;4)控制模式设定(按钮/手势);5)示例脚本使用(遥操作/数据记录/回放/策略评估);6)关键参数配置(运动学/安全限制/夹爪控制);7)故障排查方法。支持ROS2集成,提供URDF文件处理、逆向运动学计算和实时可视化功能,适用于物理机器人和仿真环境

2506_90492529的博客 1656

Spring MVC接收前端数组与集合参数:@RequestParam与@RequestBody实战解析

在Java Web开发中,HTTP请求参数绑定是前后端交互的核心基础。其原理基于HTTP协议与服务器端框架的参数解析机制,通过类型转换与数据映射实现客户端数据到服务器端对象的准确传递。这一技术的价值在于保障了数据在传输层与应用层之间的一致性与可靠性,是构建健壮API接口的基石。常见的应用场景包括查询过滤、表单提交及复杂业务数据的创建与更新。本文聚焦于Spring MVC中高频出现的数组与集合参数接收问题,通过对比@RequestParam与@RequestBody两大核心注解的绑定机制,结合JSON序列化等

weixin_34357887的博客 520

新手必看!手把手教你如何在飞牛NAS上玩转Docker容器!(飞牛Nas(fnOS)如何创建Docke容器以及Compose部署项目)

新手必看!手把手教你如何在飞牛NAS上玩转Docker容器!(飞牛Nas(fnOS)如何创建Docke容器以及Compose部署项目)

XiaoqiangClub的博客 1万+

Spring Boot @GetMapping注解深度解析:从基础语法到高级实战避坑指南

在Web开发领域,请求映射是构建RESTful API的核心基础,它定义了客户端请求与服务器端处理逻辑之间的桥梁。其原理是通过注解将HTTP请求的路径、方法、参数等元信息与特定的控制器方法进行绑定,实现请求的路由与分发。掌握请求映射技术对于构建清晰、高效、可维护的后端服务至关重要,它能显著提升接口的健壮性和开发效率。在实际的工程实践中,开发者常需处理路径变量、参数绑定、内容协商等复杂场景,并规避路径匹配冲突、版本升级适配等常见陷阱。本文聚焦Spring Boot框架中的@GetMapping注解,深入剖析其

weixin_33842304的博客 434

Chrome DevTools MCP 实战完整教程

本教程介绍了Chrome DevTools MCP(Model Context Protocol)在智能Web测试中的应用。该系统通过MCP协议将Chrome开发者工具能力标准化,并与AI结合,提供了统一的测试解决方案。核心功能包括智能自动化、深度调试分析和性能监控优化。教程详细讲解了环境搭建、MCP服务器配置、参数说明及多种工具集(输入自动化、导航、设备仿真、性能分析等)的使用方法。通过mcp-use库的MCPAgent和MCPClient组件,用户可以轻松实现自然语言驱动的浏览器操作和测试流程管理。

blues_C的博客 3800

基于STM32L4XX 、HAL库的SGM452B数字温度传感器驱动应用C语言程序设计

SGM452B_RESOLUTION_12BIT = SGM452B_CONFIG_R1 | SGM452B_CONFIG_R0 /* 12位分辨率,精度0.0625°C,转换时间200ms */SGM452B_RESOLUTION_11BIT = SGM452B_CONFIG_R1, /* 11位分辨率,精度0.125°C,转换时间100ms */SGM452B_RESOLUTION_10BIT = SGM452B_CONFIG_R0, /* 10位分辨率,精度0.25°C,转换时间50ms */

PP_Cottage的博客 325

Spring Boot 自定义参数解析器:实现 @JsonParam 注解解析 JSON 请求体

由于之前用@RequestParam无法接收request payload 正文格式为json格式的字符串,只能使用@RequestBody整个接收,觉得麻烦,但是spring自带的参数解析器不具有这种功能,只能尝试着用自定义参数解析器去解决。 自定义解析器需要实现HandlerMethodArgumentResolver接口,HandlerMethodArgumentResolver接口包含两...

ywl470812087的博客 13万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spring Boot 3.X参数绑定失效:从编译配置到依赖变更的完整解决方案

在Web开发中,参数绑定是Spring MVC框架处理HTTP请求的核心机制,它负责将请求中的查询参数、表单数据或JSON内容映射到控制器方法的入参上。其原理基于Java反射和内省机制,结合一系列HandlerMethodArgumentResolver实现数据转换与注入。这一机制的技术价值在于简化了Web层开发,提升了代码的简洁性和可维护性。然而,在框架升级或配置不当的场景下,参数绑定可能失效,导致业务逻辑异常。本文聚焦于Spring Boot 3.X升级后常见的参数解析问题,深入剖析因编译参数缺失、依赖

weixin_30527323的博客 504

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring Boot 3.4.2 @Controller 注解 5 大高级用法:从参数绑定到全局异常处理

本文深入解析Spring Boot 3.4.2中@Controller注解的5大高级用法,包括路径变量高级匹配、混合参数接收、@ModelAttribute应用、全局异常处理及自定义数据绑定。通过实际代码示例,帮助开发者掌握Spring MVC控制器层的进阶技巧,提升企业级应用开发效率。

一个2年工作经验的程序测试员 435

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

@RequestParam

   @RequestParam标记的参数可以设置为非必须!!!   当参数没有传来时的解决办法:   方法一、 @RequestParam(value="/test", required=false, defaultValue="0") int age      当参数未传递时,设置参数的默认值为0    方法二、@RequestParam(value="/test", re...

beOkWithAnything 4082
上一篇: Linux Crontab与Cron表达式不同造成的脚本不执行
下一篇: [排坑]内存缓存(Ehcache)不小心的写数据,导致缓存被污染的事故
mt23
博客等级 码龄12年 33粉丝 91原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值