当前位置: 首页 > 知识库问答 >
问题:

@NotNull不是一直使用MethodValidationPostProcessor运行

杭英杰
2023-03-14

我试图将javax.validation.constraints.NotNull与org.springframework.validation.beanValidation.MethodValidationPostProcessor.MethodValidationPostProcessor一起使用,但在同一个类中并没有像预期的那样运行。拜托,你能告诉我为什么吗?

MethodValidationConfig类:

@Configuration
@ComponentScan({ "com.mypackage" })
public class MethodValidationConfig {

    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        return new MethodValidationPostProcessor();
    }

}
@Component
@Validated
@Slf4j
public class ValidationUtils {
    public void test1(@NotNull String[] test) {
        if(test == null) {
            log.error("Test is null!!!");
        }
    }

    public void test2() {
        test1(null);
    }

}
@EnableAsync
@EnableTransactionManagement
@SpringBootApplication
@Slf4j
public class TestApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(TestApplication.class, args);

        ValidationUtils validationUtils = context.getBean(ValidationUtils.class);

        try {
            validationUtils.test1(null);
        } catch (Exception e) {
            log.info("OK");
        }

        try {
            validationUtils.test2();
        } catch (Exception e) {
            log.info("OK");
        }

    }

}

testApplication:OK com.mypackage.validationutils:Test为null!!

共有1个答案

向锦
2023-03-14

我假设会发生以下情况:当您调用test1()时,代理拦截并执行验证。当您调用test2()时,它只是将调用委托给真正的对象,其中不涉及代理。类似的问题:Spring AOP不适用于另一个方法内的方法调用

 类似资料:
  • 我有一个使用Jackson的Spring Boot应用程序。我不使用泽西只是普通的SpringMVC。我有一个包装请求类: 这个JSON看起来如下所示: javax中的@NotNull不像我所说的那样正常工作。我希望它的工作方式是,如果用户发送的JSON有一个错别字,比如: Jackson不会映射我的包装类,因为JSON中的键不匹配JsonProperty,即(“包装器”)(因此Object将为n

  • 我最近决定开始使用空校验和注释(),我使用Intellij Idea的注释库来访问这些注释。我试图弄清楚这些注释在运行时是否可以检查值是否为null,如果是,它如何处理这些错误(例如,它是否抛出,它是否只返回默认值(例如null,0,false))。此外,如果这些注释不起作用,是否存在一组在运行时起作用的更标准化注释(例如,)?如果这些不起作用,我应该停止使用它们并返回标准的空校验和(),还是应该

  • 因此,我正在考虑向json视图添加约束。 我有和这门课相似的课 我应该保留和吗?还是应该删除一个,为什么? 只是为了清楚,因为Jackson 2.6确实会抛出异常。 我正在使用springfox-swagger,看起来当我删除时,swagger中的字段被标记为可选,而不是。 我只是想知道这种情况下的最佳做法。

  • 始终使用Laravel Elotent而不是原始SQL有什么好处吗? 我有一个习惯,首先在phpMyAdmin中编写SQL来检查关系,然后将其翻译成雄辩的ORM。 有时,翻译成雄辩的ORM是痛苦和耗时的,尤其是从长而复杂的SQL查询进行翻译。与使用雄辩的ORM相比,我能够用SQL快速编写。

  • 我正在解决leetcode.com上的单词搜索问题: 给定一个二维板和一个单词,找出这个单词是否存在于网格中。 我用在线帮助编写的解决方案如下: 我的问题很简单--为什么我们使用回溯方法,而不仅仅是传统的DFS?与我们所做的非常相似,我们可以从每个字符开始,然后进行DFS来确定是否可以找到目标词。但我们没有这样做,为什么? 我对它想了很多,得出了以下推理,但我不确定--我们使用回溯方法,因为同一个

  • 问题内容: 我正在部署用Java编写的接受命令行参数的命令行工具。我将其打包为JAR文件,因为使用单个文件很方便。 问题是要运行它,您必须先调用它,这很烦人。 我目前拥有的方法是启动一个简单的bash脚本,但这并不理想。 无论如何(在Linux,Ubuntu Server中)是否可以制作一个JAR文件来单独调用Java VM?我一直在寻找Shebang,但找不到它(这是合理的,因为它是编译后的代码