Benutzerdefinierte Einschränkung ist erforderlich. Das lässt sich grob wie folgt vorgenommen werden:
Annotation:
@Target({ METHOD, FIELD })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { BigDecimalLengthValidator.class})
public @interface BigDecimalLength {
int maxLength();
String message() default "Length must be less or equal to {maxLength}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
ConstraintValidator:
public class BigDecimalLengthValidator implements ConstraintValidator<BigDecimalLength, BigDecimal> {
private int max;
@Override
public boolean isValid(BigDecimal value, ConstraintValidatorContext context) {
return value == null || value.toString().length() <= max;
}
@Override
public void initialize(BigDecimalLength constraintAnnotation) {
this.max = constraintAnnotation.maxLength();
}
}
Verbrauch:
@BigDecimalLength(maxLength = 3)
private BigDecimal totalPrice;
Das Grundbedürfnisse, für die weitere Abstimmung füllen sollte (Nachrichten in Eigenschaftendateien usw.) bitte überprüfen Sie Creating custom constraints.
Max. 10 *** Zeichen ***? 'bd.toString(). length() <= 10' – Andreas
Ich möchte es mit JSR-Annotationen validieren. Nicht auf diese Weise –
Implementieren Sie Ihre eigene benutzerdefinierte Validierungseinschränkung, d. H. Ihre eigene Annotation und Ihre eigene ConstraintValidator-Implementierung. – Andreas