@Value 不提供来自应用程序属性的值 Spring 引导
@Value not providing values from application properties Spring Boot
我正在使用 Springdoc 1.4 和 Spring-Boot 2.3,并且在 OperationCustomizer class 中,我需要从应用程序属性文件中读取值。但每次该字段总是初始化为 null
。规格如下
application.properties
application.security.authorization=true
OperationCustomizer class
@Component
public class GlobalHeaderAdder implements OperationCustomizer {
@Value("${application.security.authorization:true}")
Boolean authFilterEnabled; // <---- Initialized to NULL
@Override
public Operation customize(Operation operation, HandlerMethod handlerMethod) {
System.out.println("____________________________\n" + authFilterEnabled + "\n+++++++++++++++++++++++++");
if (authFilterEnabled) {
operation.addParametersItem(new Parameter().$ref("#/components/parameters/ClientID"));
}
operation.addSecurityItem(new SecurityRequirement().addList("Authorization"));
List<Parameter> parameterList = operation.getParameters();
if (parameterList != null && !parameterList.isEmpty()) {
Collections.rotate(parameterList, 1);
}
return operation;
}
}
下面的代码正在调用 class
@Bean
public GroupedOpenApi hideApis() {
return GroupedOpenApi.builder().group("default")
.pathsToExclude("/api/v2/**", "/v2/**")
.pathsToMatch("/api/v1/**", "/v1/**")
.addOperationCustomizer(new GlobalHeaderAdder())
.build();
}
提供的方法 here 有效,但我希望有一种方法,我不必将字段设为静态。
您的代码的问题是您通过调用构造函数自行启动 GlobalHeaderAdder
,但在那种情况下它不是 spring bean,因此 @Value("${application.security.authorization:true}")
所有其他 spring 注释将不起作用。
所以,要解决这个问题,您应该注入 GlobalHeaderAdder
bean 来创建 hideApis
:
@Bean
public GroupedOpenApi hideApis(GlobalHeaderAdder globalHeaderAdder) {
return GroupedOpenApi.builder().group("default")
.pathsToExclude("/api/v2/**", "/v2/**")
.pathsToMatch("/api/v1/**", "/v1/**")
.addOperationCustomizer(globalHeaderAdder)
.build();
}
或按以下方式创建一个 bean,您将能够以上述方式注入 hideApis
(对于此选项,您不需要 @Component
在 class GlobalHeaderAdder
):
@Bean
public GlobalHeaderAdder globalHeaderAdder() {
return new GlobalHeaderAdder();
}
您只需修复@Value中的值即可。
你的 class 应该是这样的:
@Component
public class GlobalHeaderAdder implements OperationCustomizer {
@Value("${application.security.authorization}") //<< only the name of the property,
Boolean authFilterEnabled;
我正在使用 Springdoc 1.4 和 Spring-Boot 2.3,并且在 OperationCustomizer class 中,我需要从应用程序属性文件中读取值。但每次该字段总是初始化为 null
。规格如下
application.properties
application.security.authorization=true
OperationCustomizer class
@Component
public class GlobalHeaderAdder implements OperationCustomizer {
@Value("${application.security.authorization:true}")
Boolean authFilterEnabled; // <---- Initialized to NULL
@Override
public Operation customize(Operation operation, HandlerMethod handlerMethod) {
System.out.println("____________________________\n" + authFilterEnabled + "\n+++++++++++++++++++++++++");
if (authFilterEnabled) {
operation.addParametersItem(new Parameter().$ref("#/components/parameters/ClientID"));
}
operation.addSecurityItem(new SecurityRequirement().addList("Authorization"));
List<Parameter> parameterList = operation.getParameters();
if (parameterList != null && !parameterList.isEmpty()) {
Collections.rotate(parameterList, 1);
}
return operation;
}
}
下面的代码正在调用 class
@Bean
public GroupedOpenApi hideApis() {
return GroupedOpenApi.builder().group("default")
.pathsToExclude("/api/v2/**", "/v2/**")
.pathsToMatch("/api/v1/**", "/v1/**")
.addOperationCustomizer(new GlobalHeaderAdder())
.build();
}
提供的方法 here 有效,但我希望有一种方法,我不必将字段设为静态。
您的代码的问题是您通过调用构造函数自行启动 GlobalHeaderAdder
,但在那种情况下它不是 spring bean,因此 @Value("${application.security.authorization:true}")
所有其他 spring 注释将不起作用。
所以,要解决这个问题,您应该注入 GlobalHeaderAdder
bean 来创建 hideApis
:
@Bean
public GroupedOpenApi hideApis(GlobalHeaderAdder globalHeaderAdder) {
return GroupedOpenApi.builder().group("default")
.pathsToExclude("/api/v2/**", "/v2/**")
.pathsToMatch("/api/v1/**", "/v1/**")
.addOperationCustomizer(globalHeaderAdder)
.build();
}
或按以下方式创建一个 bean,您将能够以上述方式注入 hideApis
(对于此选项,您不需要 @Component
在 class GlobalHeaderAdder
):
@Bean
public GlobalHeaderAdder globalHeaderAdder() {
return new GlobalHeaderAdder();
}
您只需修复@Value中的值即可。
你的 class 应该是这样的:
@Component
public class GlobalHeaderAdder implements OperationCustomizer {
@Value("${application.security.authorization}") //<< only the name of the property,
Boolean authFilterEnabled;