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

如何配置Spring仅在id非空时执行其自定义数字校验?

实现仅当id不为null时执行数字校验的方案

有两种简洁的实现方式可以满足你的需求:

方法一:修改自定义校验器逻辑

直接在IsNumberValidatorConstraint对应的校验器类中增加null值判断,当id为null时直接返回校验通过,仅在id不为null时执行数字校验逻辑。

示例代码:

public class IsNumberValidatorConstraintValidator implements ConstraintValidator<IsNumberValidatorConstraint, String> {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // id为null时直接通过校验
        if (value == null) {
            return true;
        }
        // 原有的数字校验逻辑
        try {
            Long.parseLong(value);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
}

这种方式无需修改实体类注解,仅调整校验器逻辑即可实现需求,兼容性最好。

方法二:使用Spring Validation的@IfPresent注解(Spring Boot 2.3+)

如果你的项目使用Spring Boot 2.3及以上版本,可以借助@IfPresent注解实现条件校验,该注解会让后续的校验仅在字段不为null时生效。

修改ProjectSearchCriteria类:

@Data
@Builder
public class ProjectSearchCriteria {
    @IfPresent
    @IsNumberValidatorConstraint(message = "invalid input for id")
    private String id;
    private String projectName;
}

通用注意事项

无论使用哪种方法,都需要确保在Controller的请求参数上添加@Valid或@Validated注解,触发Spring的校验机制:

@GetMapping("/api/projects")
public ResponseEntity<List<Project>> searchProjects(@Valid ProjectSearchCriteria criteria) {
    // 执行搜索逻辑
    return ResponseEntity.ok(projectService.search(criteria));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:53:22