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

Spring Boot 3自定义校验消息无法生效问题排查

Spring Boot 3 校验消息未正确解析的解决方法

1. 确认消息文件配置

  • 确保messages.properties文件放在src/main/resources根目录下,文件名无大小写或拼写错误。
  • 检查文件内的键值对格式:
    email.not.empty=邮箱不能为空
    

2. 修正Validator与消息源的绑定

Spring Boot 3中需确保自定义的LocalValidatorFactoryBean正确关联消息源,且替换默认校验器实现:

@Configuration
public class ValidationConfig {

    @Bean
    @Primary
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:messages"); // 使用单数方法避免多文件加载歧义
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setUseCodeAsDefaultMessage(true); // 临时开启:若返回{email.not.empty}则说明消息文件未加载
        return messageSource;
    }

    @Bean
    @Primary
    public LocalValidatorFactoryBean validator(MessageSource messageSource) {
        LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
        validator.setValidationMessageSource(messageSource);
        validator.setProviderClass(HibernateValidator.class); // 指定校验实现类
        return validator;
    }
}

3. 处理组合注解的消息覆盖

@NotEmpty是组合注解,包含@NotNull约束。若字段为null时返回默认消息,可:

  • 在DTO字段上补充@NotNull(message = "{email.not.empty}"),或
  • 在messages.properties中全局配置@NotNull的消息:
    jakarta.validation.constraints.NotNull.message=邮箱不能为空
    

4. 确保Controller触发正确校验

在Controller方法参数上使用@Valid或@Validated注解,确保使用自定义校验器:

@PostMapping("/invite")
public ResponseEntity<?> inviteUser(@Valid @RequestBody UserInvitationRequest request) {
    // 业务逻辑
}

5. 关闭默认校验自动配置(可选)

若自定义校验器仍未生效,可在application.properties中关闭Spring Boot默认配置:

spring.validation.enabled=false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:28:11