You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring RequestParam能否无需额外代码禁止空串或空白字符?

Spring @RequestParam 空/空白参数校验问题解答

默认行为

你当前的代码里,@RequestParam(required = true)只负责校验请求中必须包含该参数,并不会校验参数值是否为空字符串或仅含空白字符。所以当收到/test?states=""或/test?states=" "这类请求时,Spring会把空字符串/空白字符串正常解析到states列表中,不会触发任何错误。

无需自定义校验代码的解决方案

可以直接借助Spring自带的Validation校验框架实现,不用自己写额外的校验逻辑:

  1. 确保依赖存在:如果是Spring Boot项目,确保已经引入spring-boot-starter-validation依赖(Spring Boot 3.x用jakarta.validation包,2.x用javax.validation包)
  2. 开启校验功能:在你的Controller类或者当前方法上添加@Validated注解
  3. 添加参数校验注解:针对List<String>类型的参数,需要同时校验列表非空,且每个元素都不是空白字符串:

修改后的示例代码:

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@Validated // 开启参数校验
public class TestController {

    @GetMapping("/test")
    public List<StatesInfoVO> getTestStates(
            @RequestParam(required = true) 
            @Valid // 递归校验列表中的每个元素
            List<@NotBlank(message = "状态值不能为空或仅含空白字符") String> states) {
        // 业务逻辑实现
        return null;
    }
}

配置完成后,当请求中传入空字符串或仅含空白的states参数时,Spring会自动触发校验失败,返回400 Bad Request响应,并携带你定义的错误提示信息,完全不需要手动写校验代码。

注解说明

  • @NotBlank:专门针对字符串,校验规则是字符串不为null,且去除首尾空白后长度大于0,刚好匹配你禁止空/空白字符串的需求
  • @Valid:作用在集合参数上,会自动校验集合中的每一个元素
  • @Validated:必须添加,它是Spring开启方法级别参数校验的开关,没有这个注解的话,其他校验注解不会生效

内容的提问来源于stack exchange,提问作者PositiveM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:10:44