javax.Validierung: die Einschränkung für die überprüfung eines string-Länge in bytes

Ich bin mit javax.validation zu validieren einige bean-Felder " Werte.

Dies ist, was ich normalerweise verwenden:

public class Market {

    @NotNull
    @Size(max=4)
    private String marketCode;

    @Digits(integer=4, fraction=0)
    private Integer stalls;

    //getters/setters
}

Dadurch wird sichergestellt, dass jeder Market Instanz hat ein market-code mit einer Länge von maximal 4 Zeichen und eine Nummer mit stall mit einem maximum von 4 integer-Ziffern und 0 Dezimalstellen.

Nun, ich verwende diese Bohne zum laden/speichern von Daten aus/in DB.

In der DB habe ich die 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 werden können, höchstens 4 bytes lange. Die @Size Anmerkung wird überprüft, ob der string ist an den meisten 4 Zeichen lange, das ist falsch.

So, die Frage ist: gibt es eine Anmerkung, wie @Size, die prüft, ob der string-bytes anstelle von Zeichen?

  • 4 bytes, in welchem encoding? Sie werden wahrscheinlich brauchen Ihre eigenen validator, der effektiv überprüft "string".getBytes(Charsets.UTF_8).length
  • Sind die Zeichen in der marketCode garantiert, um zu passen in ein byte?
  • Sie scheinen WE8MSWIN1252. Das problem ist, dass ich auf einer Testumgebung, ich weiß nicht, ob die DB auf der Produktionsumgebung wird die gleiche Codierung...
  • Nein. Wenn es garantiert wurde, wäre ich nicht auf der Suche für ein Anmerkungen, die Prüfungen bytes 🙂
  • dann ist dein problem ist underspecified. Ein Charakter ist nicht ein byte, und ohne zu wissen, wie Ihre Anwendung wird zum konvertieren von Zeichen in bytes, bekannt als Codierung, dann kann man einfach nicht sagen, wie viele bytes, beliebige Strings zu besetzen. Entweder deine Anwendung gibt die Codierung, die als Teil einer benutzerdefinierten annotation, oder Ihre Anwendung-Spezifikation Dokumente das, was verwendet wird. Sie müssen wissen, der Codierung in der Lage sein, um die Anzahl von bytes angeben, die Sie versuchen zu tun, in statischen code. Dieses puzzle ist, fehlen einige Teile
  • Ich Stimme mit Ihnen überein. Ich sage meinem boss, dass es erforderlich ist, genau zu wissen, welchen Zeichensatz wir verwenden werden. Danke!!!

InformationsquelleAutor BackSlash | 2014-10-13
Schreibe einen Kommentar