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

Spring Boot在IBM WebSphere中@NotEmpty注解失效问题求助

解决IBM WebSphere 9.0.5.15下Spring Boot @NotEmpty/@NotBlank注解失效问题

问题分析

WebSphere自带了旧版本的Bean Validation实现(如Apache BVal),而@NotEmpty、@NotBlank是Hibernate Validator提供的扩展注解,并非JSR-380(Bean Validation 2.0)标准注解。当应用部署到WebSphere时,容器优先加载自带的验证组件,导致Spring Boot无法启用Hibernate Validator的扩展校验能力——这也是@NotNull作为标准注解能正常工作的原因。

解决方案

1. 强制应用使用Hibernate Validator

在pom.xml中排除WebSphere可能提供的Bean Validation依赖,明确引入Hibernate Validator:

<dependencies>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 排除容器自带的验证API -->
        <exclusions>
            <exclusion>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- 引入Hibernate Validator及对应API -->
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.2.5.Final</version> <!-- 适配Spring Boot 2.x版本 -->
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>
</dependencies>

同时在Spring Boot配置类中显式指定验证器实现:

import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.validation.Validator;
import javax.validation.Validation;

@Configuration
public class ValidatorConfig {
    @Bean
    public Validator validator() {
        return Validation.byProvider(HibernateValidator.class)
                .configure()
                .buildValidatorFactory()
                .getValidator();
    }
}

2. 修改WebSphere类加载顺序为PARENT_LAST

WebSphere默认采用PARENT_FIRST类加载策略(优先加载容器自带类),改为PARENT_LAST让应用优先加载自身依赖:

  • 登录WebSphere管理控制台
  • 进入应用程序 > 企业应用程序 > 你的WAR应用
  • 点击类加载和更新检测
  • 将类加载顺序设置为PARENT_LAST
  • 保存配置并重启应用

3. 验证配置是否生效

在Controller中注入Validator,打印其实现类确认是否为Hibernate Validator:

import javax.validation.Validator;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;
import javax.validation.Valid;

@RestController
public class UserController {
    private final Validator validator;
    private final UserService userService;

    public UserController(Validator validator, UserService userService) {
        this.validator = validator;
        this.userService = userService;
        // 打印验证器实现类
        System.out.println("Validator implementation: " + validator.getClass().getName());
    }

    @PostMapping("/enter-user")
    @ResponseStatus(code = HttpStatus.CREATED)
    public User createUser(@Valid @RequestBody UserInput user) {
        return userService.createUser(user);
    }
}

若输出为org.hibernate.validator.internal.engine.ValidatorImpl,说明配置生效。

补充说明

  • 确保Spring Boot版本与Hibernate Validator版本兼容(例如Spring Boot 2.7.x对应Hibernate Validator 6.2.x)
  • 若使用Gradle,依赖排除与引入逻辑与Maven一致,仅语法调整即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:35:11