如何在spring启动应用程序时自动验证@configuration类?

nhaq1z21  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(254)

我有一个名为myconfig.java的类。

import javax.validation.constraints.NotNull;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Configuration;

    @Configuration
    public class MyConfig {
       @NotNull
       @Value("${test.key}")
        public String queryIndex;
     }

我的问题是,在没有任何@validated或@valid的情况下,如何在spring启动应用程序时验证它。我知道@configuration类是由spring容器在启动时获取的(如果有的话,可以生成bean定义),javax.validator在类路径上。
下面的代码段很有意义,因为在pojo类上添加了@valid注解:

@PostMapping
    public String test(@Valid @RequestBody Employee emp) {

        return "";
    }

从Spring开始doc:-
链接此处以供参考
3.8.1. jsr-303bean验证api概述
jsr-303标准化了java平台的验证约束声明和元数据。使用这个api,您可以用声明性验证约束来注解域模型属性,并且运行时强制执行这些约束。

1rhkuytd

1rhkuytd1#

这是你的名字solution:-
myconfig.java文件

import javax.validation.constraints.NotBlank;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

@Configuration
@Validated
@ConfigurationProperties(prefix="test")
public class MyConfig {

    private Logger logger = LoggerFactory.getLogger(MyConfig.class);
    private static final String MYNAME = MyConfig.class.getSimpleName();

    @NotBlank(message = "Key should not be empty")
    @Value("${test.key}")
    public String test;

    public String getTest() {
        return test;
    }

    public void setTest(String test) {
        this.test = test;
    }
   }

应用程序属性

server.port=5555
test.key=
test.name=

这个依赖关系是pom.xml中必须的

<dependency>
     <groupId>javax.validation</groupId>
     <artifactId>validation-api</artifactId>
     <version>2.0.1.Final</version>
  </dependency>

因此,@validated,@configurationproperties与javax.validation约束结合在一起在幕后工作。
数据元素错误scription:-
绑定到目标org.springframework.boot.context.properties.bind.bindexception:无法将“test”下的属性绑定到com.cgi.demo.myconfig$$enhancerbyspringcglib$$3dcd81ec失败:

Property: test.test
Value: 
Reason: Key should not be empty

供sprinboot医生参考:-
点击这里获取更多信息
2.7.9. @ConfigurationProperties验证
每当用spring的@validated注解对@configurationproperties类进行注解时,spring boot就会尝试验证这些类。可以直接在配置类上使用jsr-303javax.validation约束注解。为此,请确保类路径上有符合jsr-303的实现,然后向字段中添加约束注解。

相关问题