我有个班叫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;
}
我的问题是,它是如何在没有任何验证或有效的情况下在Spring Boot应用程序的启动中得到验证的。我理解@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,可以使用声明性验证约束注释域模型属性,并且运行时强制执行这些约束。
以下是解决方案:-
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约束在幕后起作用。
错误说明:-
绑定到目标org.springframework.boot.context.properties.bind.BindExcture:未能将测试下的属性绑定到com.cgi.demo.MyConfig$$EnhancerBySpringCGLIB$$3dcd81ec失败:
Property: test.test
Value:
Reason: Key should not be empty
请参考SprinBoot文档:-
点击这里获取更多信息
2.7.9. @配置属性验证
Spring Boot尝试验证@ConfigurationProperties类,只要这些类使用Spring的@验证注释进行注释。您可以直接在配置类上使用JSR-303javax.validation约束注释。为此,请确保类路径上有兼容的JSR-303实现,然后向字段添加约束注释。
问题内容: 我尝试使用范围类型APPLICATION和带有@ Create,@ Beg的方法来注释类,但这似乎不起作用。 我想要的是在应用程序启动时立即启动无限循环。 问题答案: 如果希望在初始化后立即执行方法,则可以使用以下注释:
我有一份Java申请。 应用程序有一个决定应用程序是否在启动时启动的设置。 目前,我通过在StartUp items文件夹中放置/删除快捷方式实现了这一点。 然而,我想知道是否有更好的方法来处理这种行为。 编辑 是的,是视窗。抱歉之前没有清除。 应用程序有一个UI,用户可以在其中触发操作,并且应用程序在运行时定期在后台运行一些任务。 @Peter,如何使用应用程序中的代码更改注册表?这种方法是否与
问题内容: 我有一个Java应用程序。 该应用程序具有一个设置,该设置决定该应用程序是否在启动时启动。 目前,我可以通过在“启动项目”文件夹中放置/删除快捷方式来实现此目的。 但是,我想知道是否有更好的方法来处理此行为。 编辑 是的,它是Windows。抱歉,之前没有清除该内容。 该应用程序具有一个用户可以在其中触发动作的UI,并且该应用程序在运行时会定期在后台运行一些任务。 @Peter,如何在
我想在用户收到应用程序上的通知时自动启动应用程序。启动程序图标上不会有点击操作。
我在stackoverflow上发现了类似的问题,并试图用这种方式(LINK)解决这个问题,但在我的项目中没有起作用。谁能给我一些建议吗? pom.xml 应用属性
我有一个Web应用程序部署到Tomcat的实例中。我希望能够将tomcat配置为在Tomcat本身启动时不自动启动该应用程序。但是,我确实希望启动Tomcat管理器,以便根据需要,我可以手动启动和停止Web应用程序。 我如何说服Tomcat这样工作?