0

0

Java的IllegalArgumentException通常在什么时候抛出_非法参数校验拦截

P粉602998670

P粉602998670

发布时间:2026-03-17 13:43:31

|

241人浏览过

|

来源于php中文网

原创

IllegalArgumentException 是开发者主动抛出的运行时异常,用于参数逻辑合法性校验失败,如负数年龄、非法枚举值等;语义上区别于 NullPointerException,后者专用于明确禁止 null 的场景。

java的illegalargumentexception通常在什么时候抛出_非法参数校验拦截

IllegalArgumentException 是谁抛的、在哪儿抛的

它不是 JVM 自动抛的,而是开发者主动 throw new IllegalArgumentException() 的结果。常见于方法入口对参数做合法性检查失败时——比如传了 null 却要求非空,传了负数却要求正整数,传了不支持的枚举值,或者字符串格式明显非法(如解析日期时传了 "2023-13-01")。

注意:它属于 unchecked exception(运行时异常),编译器不强制捕获,所以很容易被忽略或漏写校验逻辑。

什么时候该用 IllegalArgumentException 而不是 NullPointerException

核心区别在于语义:如果参数本身是 null 且业务逻辑明确禁止 null,用 NullPointerException 更准确(JDK 自己也这么干,比如 Objects.requireNonNull 抛的就是它);但如果你检查的是值的逻辑合理性(比如 age = -5mode = "xyz"),那就该用 IllegalArgumentException

  • Objects.requireNonNull(param, "param must not be null") → 推荐,抛 NullPointerException
  • if (age = 0") → 合理,抛 IllegalArgumentException
  • 混用(比如对 null 手动抛 IllegalArgumentException)会模糊错误意图,调用方难排查

Spring 中怎么统一拦截并处理 IllegalArgumentException

Spring MVC 提供 @ControllerAdvice + @ExceptionHandler 做全局异常捕获,但要注意:默认不会捕获所有未声明的运行时异常,除非你显式写了对应 handler。

立即学习Java免费学习笔记(深入)”;

HaloTool
HaloTool

AI工具在线集合网站

下载

一个最小可用配置:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(IllegalArgumentException.class)
    @ResponseBody
    public ResponseEntity<String> handleIllegalArgument(IllegalArgumentException e) {
        return ResponseEntity.badRequest().body("Invalid input: " + e.getMessage());
    }
}
  • 确保该类被 Spring 扫描到(比如放在主启动类同包或子包下)
  • 别忘了加 @ResponseBody 或返回 @RestControllerAdvice,否则可能走视图解析
  • 生产环境建议封装成标准响应体(含 code/message/data),而不是裸字符串
  • 它不拦截 Filter 或 Interceptor 中抛出的异常,那些得单独处理

容易被忽略的校验盲区和性能影响

很多人只在校验“明显错”的地方 throw,却漏掉边界情况。比如:

  • 集合类参数:传了 null 或空集合,但方法内部直接调 list.get(0)
  • 时间类型:LocalDateTime.parse("2023-01-01") 缺少时分秒会抛 DateTimeParseException,不是 IllegalArgumentException,但语义相同,建议包装后重抛
  • 频繁调用的方法(如工具类、DTO 转换)里做复杂校验,可能引入可观的 CPU 开销,尤其在高并发场景
  • 日志打太全(比如 dump 整个 request body)可能泄露敏感字段,建议只记录关键参数名和值摘要

校验逻辑越靠近入口越好,但别为了“严谨”在每层都重复校验;接口层收口一次,服务内部信契约即可。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

163

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

89

2026.01.26

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

256

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1174

2024.03.01

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

848

2023.08.22

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

781

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1571

2023.10.24

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

7

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.6万人学习

Java 教程
Java 教程

共578课时 | 84.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号