收集 Java 程序员在处理接口的参数校验时觉得麻烦的例子,收集无法使用 @NotNull 等注解来校验参数的例子

查看 132|回复 10
作者:sticki   
对于 Java 程序员来说,接口的参数校验一般是通过 @NotNull 、 @NotBlank 、 @Size(min = 0, max = 255) 等这些注解来校验的。
但是有一些情况下,这些注解无法满足校验的需求,比如下面这段代码:
public class Test {
        /**
         * 状态,值必须为枚举类 Status 中的 code
         */
        Integer status;
        /**
         * 是否开启语音提示
         */
        Boolean enableVoice;
        /**
         * 语音提示内容
         */
        String voiceContent;
}
这里涉及到两种参数校验是现有的注解无法满足的:
[ol]
  • 状态的 Int 值必须存在于枚举类中
  • 当开启语音提示时,内容必须不为空,本质上是上下文关联的参数校验
    [/ol]
    这里我只是进行举例,我主要是想收集一下大家遇到的类型情况,然后我想做一个组件,能够尽可能的解决这些问题。
    其实我已经有一个这样的组件了,但是担心自己考虑到的情况还不太够,所以想收集一下大家的建议,之后完善一下然后开源出来给大家使用。
  • gitdoit   
    你是否在寻找 javax.validation.constraints.AssertTrue
    liaojl   
    复杂的参数校验直接 service 里写了,上下文关联的,有些还要查数据库校验的,很难做到一个组件通吃的。
    sticki
    OP
      
    @gitdoit 看起来并不是
    sticki
    OP
      
    @liaojl 我只做那些不用查库的,另外我只是想收集这些例子🤡
    cheng6563   
    简单解决下常用问题就行了,别搞太复杂。
    你是可以搞个解决所有问题的 DSL 来做参数验证,但到了那阶段还不如直接敲程序解决了
    eastjoehan   
    之前碰到一个,前端传入状态值的,我想用判断状态值是否在已有枚举中,或者在集合里面,我找了下好像没有支持这个情形的注解?
    walle1530   
    你是否在寻找 javax.validation.ConstraintValidator
    sticki
    OP
      
    @eastjoehan 是的,我就是想收集这些无法使用现有注解来进行校验的情况
    其实我是只希望大家告诉我这些情况就好了,不用跟我说其他劝退的话😅(这句不是跟 @eastjoehan 说的)
    sticki
    OP
      
    @walle1530 ConstraintValidator 可以解决一部分问题,但不够通用,比如我上面举例的第 2 点,enable 的那个,用 ConstraintValidator 是无法解决的
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部