微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

验证 DTO 中的整数字段

如何解决验证 DTO 中的整数字段

我的 Spring Boot 应用程序具有以下请求 DTO:

public class MyAwesomeDTO {

    @NotNull
    private Integer itemCount;
}

我希望 itemCount 为 0,或者在 [3,10] 范围内 .后者可以使用 @Min(3) @Max(10) 进行验证,但我如何验证“OR”条件?

解决方法

itemCount0null 之间存在差异。 @NotNull 只防范 null,不防范 0

完成您需要的最简单方法是编写自定义验证器。

首先创建一个自定义注释来触发验证:

@Target( { ElementType.METHOD,ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ItemCountValidator.class)
public @interface ValidItemCount {
    String message() default "Invalid item count";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

接下来,创建自定义验证器:

public class ItemCountValidator implements 
  ConstraintValidator<ValidItemCount,Integer> {

    @Override
    public void initialize(ValidItemCount validItemCount) {
    }

    @Override
    public boolean isValid(Integer itemCount,ConstraintValidatorContext cxt) {
        return itemCount != null && (itemCount == 0 || itemCount > 3 && itemCount < 10);
    }

}

最后,更新您的 DTO:

public class MyAwesomeDTO {

    @ValidItemCount
    private Integer itemCount;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。