自定义参数类常常需要对每个参数进行字节长度的约束
1.首先,自定义注解:
@Documented @Constraint(validatedBy = ByteSizeValidator.class) @Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @ReportAsSingleViolation @NotNull public @interface ByteSize { String message() default "数据字节长度不合法"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; int min() default 0; int max() default Integer.MAX_VALUE; }
2.编写字节约束的实现类:
public class ByteSizeValidator implements ConstraintValidator<ByteSize, String> { private int min; private int max; @Override public void initialize(ByteSize constraintAnnotation) { min = constraintAnnotation.min(); max = constraintAnnotation.max(); } @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (value == null) { return true; } int byteCount = value.getBytes(CharsetKit.CHARSET_UTF_8).length; return byteCount >= min && byteCount <= max; } }
3.在参数实体类中使用注解:
@Data public class StudentVo { /** * 学校编码 */ @NotBlank(message = "学校编码不可为空") @ByteSize(max = 50, message = "学校编码最大字节长度为50") private String studentcode; }
就这样简简单单就完成自定义注解方式控制入参的的字节长度;