当前位置: 首页 > 面试题库 >

使用枚举值和注释的Java字符串验证

汪修诚
2023-03-14
问题内容

我想使用注解针对一组值验证字符串。

我想要的基本上是这样的:

@ValidateString(enumClass=com.co.enum)
String dataType;

int maxValue;
int minValue;
int precision;

要么

@ValidateString(values={"String","Boolean", "Integer"})
String dataType;

int maxValue;
int minValue;
int precision;

我还想根据在中设置的值对其他变量进行一些验证dataType

if (dataType = "String") {
    // maxValue, minValue, precision all should be null or zero
}

我想不出一种通过自定义批注实现此目的的方法
有人请帮助我。


问题答案:

这就是我所做的。

注解

public @interface ValidateString {

    String[] acceptedValues();

    String message() default "{uk.dds.ideskos.validator.ValidateString.message}";

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

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

验证类别

public class StringValidator implements ConstraintValidator<ValidateString, String>{

    private List<String> valueList;

    @Override
    public void initialize(ValidateString constraintAnnotation) {
        valueList = new ArrayList<String>();
        for(String val : constraintAnnotation.acceptedValues()) {
            valueList.add(val.toUpperCase());
        }
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return valueList.contains(value.toUpperCase());
    }

}

我用它像

@ValidateString(acceptedValues={"Integer", "String"}, message="Invalid dataType")
String dataType;

Long maxValue;
Long minValue;

现在,我需要弄清楚如何执行条件检查。如果为String,则maxValue和minValue应该为null或零。

有任何想法吗?



 类似资料:
  • 问题内容: 我觉得这是一个简单的问题,但是我尝试过的所有事情都不适合我。我有一个枚举,我有字符串构造函数的原因是因为Java不允许枚举为数字..我在没有字符串构造函数的情况下直接尝试了AA,AB,2C,但这给出了错误。请注意,对于现有的枚举,我要添加C(“ 2C”)。 现在我有一个mybatis映射器,它会进行合并,这是现有的,并且映射器的参数之一是TestEnum。到目前为止,由于枚举值和字符串

  • 假设我有一个简单的注释: 和枚举: 我不能这样使用这个注释: 如果说“它必须是一个编译过的时间常数”,这段代码就会失败。我确实理解为什么会发生这种情况,而且我知道JSL中关于编译时间常数的部分。 我的问题是,为什么不按照规范将枚举作为编译时间常数,原因是什么。你不能更改枚举名。。。 库马尔编辑

  • 问题内容: 当用户登录时,我正在设置一个sessionScope对象,并且那个bean对象由几个其他bean组成。这些bean的属性之一是枚举,但是我发现EL无法获取enum类的属性,而只能获取Java bean对象的属性。因此,我决定为该枚举创建一个bean类,并将该枚举嵌套在该bean类中。我为替换枚举而制作的java bean,以便可以通过EL获得其值,如下所示: 但是,当我尝试访问等级名称

  • 我正在从带注释的java代码生成OpenAPI 3.0文档。但问题是,当我将@Schema注释添加到enum时,所有值都会消失。我正在使用Thorntail 2.3.0。最终使用microprofile openapi分数。 我知道我可以改变。yaml文件,但我需要直接从Java代码生成yaml。 这是我在github上的最小示例:https://github.com/pkristja/openA

  • 在尝试获取allowableValues标记的枚举值时,我遇到了以下错误。 批注属性apimodelProperty.AllowAbleValues的值必须是常量表达式 我想做的是: 我有可能做我想做的事吗?我知道在我的API中只公开枚举是可能的,然后swagger会自动识别允许的值,但是需要将有问题的字段公开为字符串,即使我们的内部逻辑将其作为枚举。 提前感谢您的帮助!

  • 我正在使用从以下依赖项导入的Swagger/OpenAPIV3注释创建应用程序的API描述: 其中一个批注是批注,它接受名为的属性,该属性允许字符串数组: 现在,我想使用在枚举类上构造的自定义方法,该方法返回允许的字符串数组,因此不需要在每次向枚举添加类型时添加该方法。以便我们可以这样使用它: 现在这是无法编译的,因为在执行注释时不知道该方法。是否有这样的解决方案允许在SwaggerV3注释属性值