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

Spring未触发JSR-303 Bean验证:已满足配置条件仍无效

Spring Bean Validation未生效问题

我已按要求配置了MethodValidationPostProcessor,并给目标Spring Bean添加了@Validated注解,但Hibernate Bean Validation仍未启用。调用backgroundCheck方法时,传入的Person对象name为null、age小于18,预期会抛出验证异常,但实际方法无异常执行完毕。

代码配置如下:

Application类

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;

@SpringBootApplication
public class Application implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }

    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
        methodValidationPostProcessor.setValidator(validator());
        return methodValidationPostProcessor;
    }

    @Override
    public void run(String... args) {

        PersonService personService = new PersonService();

        try {
            personService.backgroundCheck(new Person(null, 4));
        } catch (Exception e) {
            System.out.println("<<< EXCEPTION >>>");
            return;
        }

        System.out.println("<<< NO VALIDATIONS THROWN >>>");
    }
}

PersonService类

import jakarta.validation.Valid;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

@Validated
@Service
public class PersonService {

    public void backgroundCheck(@Valid Person person) {
        System.out.printf("Running background check for %s%n", person.name());
    }
}

Person记录类

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;

public record Person(
        @NotBlank(message = "Name must not be blank")
        String name,

        @Min(value = 18, message = "Age should not be less than 18")
        int age) {
}

pom.xml依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.3</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <java.version>21</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

请问我遗漏了什么配置?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:24:57