基于@GroupSequence 实现入参顺序校验

基于@GroupSequence 实现入参顺序校验

场景:在开发过程中我们会基于注解实现非空,长度,格式等校验,通常在入参构建的时候就可以校验,这样在最外部就可以拦截,不用到Service层通过代码校验。但是有个缺点就是并不能指定校验的优先顺序。基于这种场景下,结合了@GroupSequence注解来实现顺序校验接口,在接口入参时就可以校验。
特别感谢我的同事 - 双明靓仔给提供的代码。

校验接口
基于@GroupSequence 注解实现 参数的顺序校验

@GroupSequence({
    
    VerifySeq.N0.class, VerifySeq.N1.class, VerifySeq.N2.class,VerifySeq.N3.class,
        VerifySeq.N4.class,VerifySeq.N5.class,VerifySeq.N6.class, VerifySeq.N7.class,
        VerifySeq.N8.class, VerifySeq.N9.class, Default.class})
public interface VerifySeq {
    
    
    interface N0 {
    
    
    }
    interface N1 {
    
    
    }
    interface N2 {
    
    
    }
    interface N3 {
    
    
    }
    interface N4 {
    
    
    }
    interface N5 {
    
    
    }
    interface N6 {
    
    
    }
    interface N7{
    
    
    }
    interface N8 {
    
    
    }
    interface N9 {
    
    
    }

}

校验类
重点在校验注解上添加 groups = VerifySeq.N1.class。可以根据具体的业务场景来实现参数的校验顺序。

@Data
public class SecurityQuestionVfyDTO {
    
    

    @NotBlank(message = "###err.param.ada.isNotEmpty###", groups = VerifySeq.N1.class)
    @Pattern(regexp = ADA_FORMAT_ALLOW_BLANK, message = "###error.param.format.ada###", groups = VerifySeq.N2.class)
    @ApiModelProperty(value = "号码", required = true, example = "63304")
    private String ada;

    @NotBlank(message = "###err.param.name.isNotEmpty###", groups = VerifySeq.N5.class)
    @ApiModelProperty(value = "姓名", required = true, example = "张三")
    private String name;

    @NotBlank(message = "###err.param.qid.isNotEmpty###", groups = VerifySeq.N3.class)
    @ApiModelProperty(value = "问题ID", required = true, example = "1")
    private String qid;

    @Length(max=60, message = "###err.param.answer.tooLong###")
    @NotBlank(message = "###err.param.answer.isNotEmpty###", groups = VerifySeq.N4.class)
    @ApiModelProperty(value = "答案", required = true, example = "第一中学")
    private String answer;

}

使用
在需要校验的接口处添加@Validated(VerifySeq.class)

public interface ISecurityQuestionClient {
    
    
    @PostMapping(path = "/***/***/***", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    WebResult verifySecurityQuestion(@Validated(VerifySeq.class) @RequestBody SecurityQuestionVfyDTO securityQuestionVfyDTO);
}

猜你喜欢

转载自blog.csdn.net/qq_43409973/article/details/131291055