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

如何修改Spring Validator代码实现表单提交时一次性展示所有校验错误

代码修改方案

问题根源

你当前的校验逻辑每触发一条校验失败就会执行return直接终止整个校验方法,因此只会收集到第一条匹配的错误信息,最终只能逐条提示。

具体修改点

  • 移除所有if校验块末尾的return语句,让所有校验逻辑都能执行完成,所有符合条件的错误都会被存入Errors对象
  • 修正错误的字段名拼写:你现在给用户名添加错误时写的字段名是userrName(多了一个r),需要改为和实体类属性一致的userName,否则前端无法正确绑定对应字段的错误提示
  • 可选优化:添加空指针防护,避免user.getUserName()为null时抛出空指针异常

修改后的完整代码

@Component
public class UserValidation implements Validator {
    @Override
    public boolean supports(Class<?> clazz) {
        return User.class.isAssignableFrom(clazz);
    }
    
    @Override
    public void validate(Object target, Errors errors) {
        User user = (User) target;
        final String nameRegex = "[A-Za-z]+(\\s[A-Za-z]+)*";      
        final String phoneRegex = "^[6-9]\\d{9}$";
    
        // 用户名校验
        if (user.getUserName() == null || user.getUserName().trim().equals("")) {
            errors.rejectValue("userName", "userName.required", "Error: User Name is required");
        } else {
            if (user.getUserName().length() > 20) {
                errors.rejectValue("userName", "userName.lengthLimit", "Error: User Name reached maximum limit of characters allowed");
            }
            if (!user.getUserName().matches(nameRegex)) {
                errors.rejectValue("userName", "userName.invalid", "Error: Invalid User Name ");
            }
        }
        
        // 用户类型校验
        if ("0".equals(user.getUserType())) {
            errors.rejectValue("userType", "userType.required", "Error: Select User Type");
        }
        
        // 用户手机号校验
        if (user.getUserNumber() == null || user.getUserNumber().trim().equals("")) {
            errors.rejectValue("userNumber", "userNumber.required", "Error: User Number is required");
        } else if (!user.getUserNumber().matches(phoneRegex)) {
            errors.rejectValue("userNumber", "userNumber.invalid", "Error: Invalid User Number ");
        }
    }
}

补充说明

修改完成后,你在调用校验逻辑的位置直接从Errors对象中获取所有错误即可,比如调用errors.getAllErrors()可以拿到全部错误信息,统一返回给前端就能一次性展示所有提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:57:03