Ich verwende javax.validation
, um einige Werte von Bean-Feldern zu validieren.javax.validation: Einschränkung, um eine Stringlänge in Bytes zu validieren
Dies ist, was ich normalerweise:
public class Market {
@NotNull
@Size(max=4)
private String marketCode;
@Digits(integer=4, fraction=0)
private Integer stalls;
// getters/setters
}
Dies wird sicherstellen, dass jede Market
Instanz einen Markt Code mit einer maximalen Länge von 4
Zeichen und eine Reihe von Stall mit maximal 4 Vorkommastellen hat und 0 Dezimalziffern.
Jetzt verwende ich diese Bean zum Laden/Speichern von Daten von/zu DB.
Im DB Ich habe Tabelle Markets
wie folgt definiert:
CREATE TABLE MARKETS (
MARKET_CODE VARCHAR2(4 BYTE) NOT NULL,
STALLS NUMBER(4,0)
)
Wie Sie sehen können, habe ich MARKET_CODE
, die höchstens 4 Bytes lang sein kann. Die @Size
Annotation überprüft, ob die Zeichenfolge maximal 4 Zeichen lang ist, was falsch ist.
Die Frage ist also: Gibt es eine Annotation wie @Size
, die für die Zeichenfolge Bytes anstelle der Zeichen überprüfen?
4 Bytes in welcher Codierung? Sie werden wahrscheinlich Ihren eigenen Validator brauchen, der '' string '' effektiv prüft .getBytes (Charsets.UTF_8) .length' – ptomli
Sind die Zeichen im marketCode garantiert in ein Byte zu passen? – Simon
@ptomli Sie scheinen "WE8MSWIN1252" zu sein. Das Problem ist, dass ich in einer Testumgebung bin, ich weiß nicht, ob die DB in der Produktionsumgebung die gleiche Codierung haben wird ... – BackSlash