gpt4 book ai didi

属性文件中值的 Java validator 注释

转载 作者:行者123 更新时间:2023-12-01 17:46:52 25 4
gpt4 key购买 nike

我正在尝试编写一个 validator 来验证 application.properties 中的属性值

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = BaseUrlStartsWithHttpsValidator.class)
public @interface CheckBaseUrlStartsWithHttps {
String message() default "Base url does not start with https:// check your configuration, "
+ "Found: ${validatedValue}";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

String value() default "";
}

这是一个简单的验证,我只是检查字符串是否以 https:// 开头。

以及我尝试通过用它注释字段来使用它的方式:

@CheckBaseUrlStartsWithHttps
@Value("${my.base.url}")
private String baseUrl;

但它似乎没有达到我尝试更改 @Target 类型的目的,是否可以通过这种方式验证属性,我正在使用 Spring 框架。

最佳答案

通过阅读、阅读、阅读和尝试不同的事情,我自己找到了答案。事实证明,在我正在读取属性的类中,我必须使用 @Validated@ConfigurationProperties(prefix = "my") 注释类本身,然后我的检查正在按预期工作。所以最终产品是:

public class BaseUrlValidator implements ConstraintValidator<CheckBaseUrl, String> {

@Override
public boolean isValid(@Nullable String value, @Nullable ConstraintValidatorContext context) {
if (value == null) {
return false;
}

return value.startsWith("https://");
}
}

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = BaseUrlValidator.class)
public @interface CheckBaseUrl {
String message() default "Base URL should start with https://. Found: ${validatedValue}";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

String value() default "";
}

@Service
@Validated
@ConfigurationProperties(prefix = "my")
public class MyService {
@CheckBaseUrl
@Value("${my.base.url}")
private String baseUrl;
...
}

唯一可能有点烦人的事情是,如果网址配置不正确,这将使应用程序在启动时失败,这本身可能是一件好事,可以立即修复,但我宁愿希望它在访问时在运行时失败并抛出 RumetimeException。无论如何,这似乎可以解决问题。

关于属性文件中值的 Java validator 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60852999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com