private static void applyDigits(Property property, ConstraintDescriptor<?> descriptor) { if ( Digits.class.equals( descriptor.getAnnotation().annotationType() ) ) { @SuppressWarnings("unchecked") ConstraintDescriptor<Digits> digitsConstraint = (ConstraintDescriptor<Digits>) descriptor; int integerDigits = digitsConstraint.getAnnotation().integer(); int fractionalDigits = digitsConstraint.getAnnotation().fraction(); @SuppressWarnings("unchecked") final Iterator<Selectable> itor = property.getColumnIterator(); if ( itor.hasNext() ) { final Selectable selectable = itor.next(); if ( Column.class.isInstance( selectable ) ) { Column col = (Column) selectable; col.setPrecision( integerDigits + fractionalDigits ); col.setScale( fractionalDigits ); } } } }
/** * Checks whether a given value is is a number or not * * @param validationObject * @param annotate * @return */ private boolean validateDigits(Object validationObject, Annotation annotate) { if (checkNullObject(validationObject)) { return true; } if (checkvalidDigitTypes(validationObject.getClass())) { if (!NumberUtils.isDigits(toString(validationObject))) { throwValidationException(((Digits) annotate).message()); } } return true; }
@Entity @XmlRootElement @Table(name = "Registrant", uniqueConstraints = @UniqueConstraint(columnNames = "email")) public class Member implements Serializable { @Id @GeneratedValue private Long id; @NotNull @Size(min = 1, max = 25) @Pattern(regexp = "[^0-9]*", message = "Must not contain numbers") private String name; @NotNull @NotEmpty @Email private String email; @NotNull @Size(min = 10, max = 12) @Digits(fraction = 0, integer = 12) @Column(name = "phone_number") private String phoneNumber;
@Entity public class ValidationEntity @Id private String eId; @Column @NotNull(message="Age should not be null") private int age; @Column @Null(message="The value should be null.") private String nullField; @Column @AssertFalse(message="The person type must be human") private boolean isHuman; @Column @Digits(message="Invalid number.", fraction = 0, integer = 0) private int digits; @Column @Pattern(message="Invalid pattern.", regexp = "^.+@.+\\.") private String pattern; private int min;
@Data @Entity @Table(name="Taco_Order") public class Order implements Serializable { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String ccNumber; @Pattern(regexp="^(0[1-9]|1[0-2])([\\/])([1-9][0-9])$", message="Must be formatted MM/YY") private String ccExpiration; @Digits(integer=3, fraction=0, message="Invalid CVV") private String ccCVV;
getValidationMessage(property, a.message(), Validator.ValidationMessage.NOT_NULL))); LOGGER.debug(() -> "BeanPropertyBeanValidationPostProcessor: added validator to property [" + property + "] for constraint [" + NotNull.class.getName() + "]"); property.validator(Validator.min(Integer.valueOf(a.min()).doubleValue(), getValidationMessage(property, a.message(), Validator.ValidationMessage.MIN))); property.validator(Validator.max(Integer.valueOf(a.max()).doubleValue(), getValidationMessage(property, a.message(), Validator.ValidationMessage.MAX))); LOGGER.debug(() -> "BeanPropertyBeanValidationPostProcessor: added validator to property [" ((Builder) property).validator(Validator.digits(a.integer(), a.fraction(), getValidationMessage(property, a.message(), Validator.ValidationMessage.DIGITS))); LOGGER.debug(() -> "BeanPropertyBeanValidationPostProcessor: added validator to property [" + property + "] for constraint [" + Digits.class.getName() + "] with values [" + a.integer() + "/" + a.fraction() + "]"); }); ((Builder) property).validator(Validator.pattern(a.regexp(), getValidationMessage(property, a.message(), Validator.ValidationMessage.PATTERN), convertPatternFlags(a.flags()))); LOGGER.debug(() -> "BeanPropertyBeanValidationPostProcessor: added validator to property [" + property + "] for constraint [" + Pattern.class.getName() + "] with value [" + a.regexp()
@Digits(integer = 4, fraction = 2) public BigDecimal getPrice() { return price; }
public class Util { public static int getFraction(Object obj, String fieldName) { try { Digits annotation = obj.getClass().getDeclaredField(fieldName).getAnnotation(Digits.class); return annotation.fraction(); } catch (NoSuchFieldException | SecurityException e) { // BOOM! throw new IllegalStateException("Something went awfully wrong...", e); } } }
private static class DigitsDummyEntity { @Digits(integer = 1, fraction = 2) private BigDecimal bigDecimal; @Digits(integer = 1, fraction = 0) private BigInteger bigInteger; @Digits(integer = 1, fraction = 0) private byte bytePrimitive; @Digits(integer = 1, fraction = 0) private short shortPrimitive; @Digits(integer = 1, fraction = 0) private int intPrimitive; @Digits(integer = 1, fraction = 0) private long longPrimitive; @Digits(integer = 1, fraction = 0) private Byte byteObject; @Digits(integer = 1, fraction = 0) private Short shortObject; @Digits(integer = 1, fraction = 0) private Integer intObject; @Digits(integer = 1, fraction = 0) private Long longObject; }