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

Spring Boot:POST请求字符串字段首尾空格校验报错需求及问题

字符串首尾空格校验方案(替代@NotBlank)

@NotBlank注解仅会校验字符串非null且trim后长度大于0,无法阻止字段本身存在首尾空格(比如" test "会被@NotBlank放行)。以下是两种可行的解决方式:

1. 快速实现:使用@Pattern正则校验

直接通过正则表达式限制字符串首尾不能有空格,中间允许包含空格。在实体类字段上添加注解:

import javax.validation.constraints.Pattern;

public class UserRequest {
    @Pattern(
        regexp = "^(?!\\s).*(?<!\\s)$",
        message = "用户名不能包含首尾空格"
    )
    private String username;

    // 其他字段...
}

正则说明:

  • ^(?!\\s):正向否定预查,确保字符串开头不是空格
  • (?<!\\s)$:反向否定预查,确保字符串结尾不是空格

如果需要同时校验字段非空,可搭配@NotBlank使用。

2. 复用性方案:自定义校验注解

如果多个字段需要相同的首尾空格校验,自定义注解更便于维护:

步骤1:定义自定义注解

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Documented
@Constraint(validatedBy = NoLeadingTrailingWhitespaceValidator.class)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface NoLeadingTrailingWhitespace {
    String message() default "字段不能包含首尾空格";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

步骤2:实现校验逻辑

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class NoLeadingTrailingWhitespaceValidator implements ConstraintValidator<NoLeadingTrailingWhitespace, String> {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // 若允许空值,此处返回true;需非空则搭配@NotBlank
        if (value == null || value.isEmpty()) {
            return true;
        }
        return !value.startsWith(" ") && !value.endsWith(" ");
    }
}

步骤3:在字段上使用

import javax.validation.constraints.NotBlank;

public class UserRequest {
    @NoLeadingTrailingWhitespace(message = "用户名不能有首尾空格")
    @NotBlank(message = "用户名不能为空")
    private String username;

    // 其他字段...
}

注意事项

确保Spring Boot项目中已引入spring-boot-starter-validation依赖,否则校验注解无法生效:

<!-- Maven 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

内容的提问来源于stack exchange,提问作者David Montero Crespo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:40:13