自定义注解@ValidValueList
1、自定义注解 @ValidValueList
和验证器 ValidValueListValidator
来确保集合中的元素必须是在指定的值列表中。
2、注解 @ValidValueList
允许你在字段或参数上标记一个集合,并为其提供一组有效的值。验证器 ValidValueListValidator
则用于检查集合中的元素是否都在指定的值列表中。
代码实现:
@Target({FIELD, PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = ValidValueListValidator.class)
public @interface ValidValueList {
String[] value() default { };
String message() default "invalid value";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
验证器类:
public class ValidValueListValidator implements ConstraintValidator<ValidValueList, Collection<String>> {
private String[] validValues;
@Override
public void initialize(ValidValueList constraintAnnotation) {
validValues = constraintAnnotation.value();
}
@Override
public boolean isValid(Collection<String> value, ConstraintValidatorContext context) {
//允许空集合
if (value == null){
return true;
}
//使用Stream遍历集合中的每个元素,验证是否在允许的参数值列表中
boolean allValid = value.stream().allMatch(item -> item != null && containsIgnoreCase(item, validValues));
return allValid;
}
private boolean containsIgnoreCase(String value, String[] validValues) {
//检查是否包含在允许的参数值列表中
for (String validValue : validValues){
if (validValue.equals(value)){
return true;
}
}
return false;
}
}
示例:
@ValidValueList(message = "输入参数不在值列表中", value = {"MAX", "MIN", "FIRST", "LATEST"})
private List<String> reportInfo;
注意:需要在Controller加上@Valid注解!多层对象嵌套也需要逐层添加@Valid注解!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)