java - 使用 Play 对象验证十进制数

标签 java playframework annotations playframework-2.1

我正在尝试在 Play 2.1 上使用十进制数字变量创建一个对象。 我想使用注释设置验证,目前我所做的是:

import play.data.validation.Constraints.Max;
import play.data.validation.Constraints.Min;
@Max(10)
@Min(0.1)
public Float someNumber; 

但它说不能将 double 转换为 long。 我怎样才能进行这种验证?

谢谢

最佳答案

您应该创建自己的 validator 。看一下 MaxMin 验证,这将帮助您开始通过扩展 AbstractAnnotationCheck 创建自己的 validator 。

以下是我为了能够注释 JPA 实体中的属性(如 @Decimal("15,2"))所做的事情。

用作注释的接口(interface):

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Constraint(checkWith = DecimalCheck.class)
public @interface Decimal {

    String[] value() default {""};
    String[] lang() default {"*"};
}

DecimalCheck 看起来像这样:

public class DecimalCheck extends AbstractAnnotationCheck<Decimal> {

    public int digits = 0;
    public int decimals = 0;

    @Override
    public void configure(Decimal number) {
        String[] values = StringUtils.split(number.value()[0], ",");

        if (values.length > 1) {
            decimals = Integer.parseInt(values[1]);
            digits = Integer.parseInt(values[0]) - decimals;
        }
    }

    public boolean isSatisfied(Object validatedObject, Object value, OValContext context, Validator validator) {
        value = play.data.validation.Validation.willBeValidated(value);
        if (value == null || value.toString().length() == 0) {
            return true;
        }
        if (value instanceof BigDecimal) {
            BigDecimal number = (BigDecimal) value;

            int numberOfDecimals = number.scale();
            int numberOfDigits = String.valueOf(number.intValue()).length();

            if (numberOfDecimals <= decimals && numberOfDigits <= digits) {
                return true;
            }
        }       
        return false;
    }
}

您当然可以扩展 isSatisfied 方法以支持值 Object 参数的更多类型。您可能有一个 StringLong 或任何您希望能够使用此检查的内容。或者,在您的情况下是 Float

关于java - 使用 Play 对象验证十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15081851/

相关文章:

java - 如何将 getDuration 放入 TextView 中?

java - 如何禁用 TrueZIP key 管理器服务?

java - 启动自动测试时 Play Framework 中的配置日志记录

objective-c - 检查 mapView 是否已经包含注释

java.util.Scanner 识别德语特殊字符

java - 通过默认 SSLSocketFactory 创建的 Socket 发送密码是否安全?

ruby-on-rails - Java Play Framework 1.2.x之后的下一步?

playframework - sbt 0.13.8 URI 有一个权限组件

r - 如何使用 ggpubr 和 ggsignif 的组合用 p 值注释箱线图?

spring - 注释数组作为注释的参数,在 Scala 中