2017-11-03 2 views
-3

Ich habe eine Anforderung zu Validierungslänge für ein BigDecimal-Objekt mit JSR-Validatoren. Es sollte maximal 10 Zeichen enthalten.Validierungsgröße für BigDecimal für gegebene Länge, nicht Genauigkeit

Some valid examples: 
123456789.0 
12345.67890 
12345.67 
1.2345 

Invalid examples: 
123456789.
123.32131232 

Wie kann ich dies mithilfe von Annotation erreichen? Nach @Size Annotation ist für String-Objekte gemäß JSR-Dokumentation.

@Size(max = 10) 
@Column(name = "totalPrice") 
private BigDecimal totalPrice; 
+0

Max. 10 *** Zeichen ***? 'bd.toString(). length() <= 10' – Andreas

+0

Ich möchte es mit JSR-Annotationen validieren. Nicht auf diese Weise –

+1

Implementieren Sie Ihre eigene benutzerdefinierte Validierungseinschränkung, d. H. Ihre eigene Annotation und Ihre eigene ConstraintValidator-Implementierung. – Andreas

Antwort

0

können Sie versuchen,

'@Digits (integer = Fraktion =) oder @DecimalMax (value = "9999999999,999" message = "Der Dezimalwert kann nicht mehr als 9999999999,999 sein")'

das sollte beides funktionieren.

, wenn Sie wissen wollen, wie diese zu verwenden, dann gehen Sie mit folgenden Urls

für @digit

https://www.owasp.org/index.php/Bean_Validation_Cheat_Sheet

für @decimalmax

http://www.c-sharpcorner.com/UploadFile/5fd9bd/javax-annotation-and-hibernate-validator-a-pragmatic-appro/

0

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.

Verwandte Themen