Erste Schritte mit javax.validation

TorstenM1979

Mitglied
Hallo,

ich versuche das Thema rund um die javax.validation zu verstehen und habe ein erstes kleines Beispiel geschrieben - welches allerdings nicht funktioniert, d.h. die Validierung findet nicht statt.

Mein Ziel ist es, einen Long-Wert auf einen Minimalwert hin zu prüfen. Folgende Klassen habe ich bisher:

Die Annotation:

Java:
package snippets.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Constraint(validatedBy = snippets.validators.MinValue.class)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MinValue {
    String message() default "Please check min value";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

Die Validierungsklasse

Code:
package snippets.validators;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MinValue implements ConstraintValidator<snippets.annotations.MinValue, Long> {
    public boolean isValid(Long value, ConstraintValidatorContext context) {
        if (value == null) {
            return false;
        }

        if (value.longValue() >= 10) {
            return true;
        }

        return false;
    }
}

Die Klasse, in der die Validierung genutzt werden soll:

Code:
package snippets;

import snippets.annotations.MinValue;

public class Value {
    @MinValue
    private Long value;
    
    public Value(long value) {
        this.value = Long.valueOf(value);
    }
    
    public long getValue() {
        return this.value;
    }
}

Und eine Main:


Code:
package snippets;

public class Main {
    public static void main(String[] args) {
        var value = new Value(314L);
        
        System.out.println(value.getValue());
    }
}

Wie schon erwähnt, ist das Thema für mich komplett neu. Kann jemand helfen?

Vielen Dank im Voraus.


VG Torsten
 

KonradN

Super-Moderator
Mitarbeiter
Eine Annotation muss auch beachtet werden. Das ist nur wie ein Aufkleber auf etwas. Nur weil ich einen Aufkleber auf der Stirn habe, auf dem steht: Monatsgehalt: 1.000.000€ bekomme ich dieses Gehalt nicht.

Du brauchst also etwas, das eben diese Annotation beachtet. Du musst also Code haben, dass auf diese Annotations schaut und dann aktiv etwas macht (Also ich brauche einen Mitarbeiter bei HR, der bei allen Mitarbeitern schaut, ob diese so einen Aufkleber auf der Stirn haben ... Das wäre dann die Chance, dass ich mein Gehalt bekomme :) )

Das ist bei javax.validation (JSR 380) z.B. unter https://www.baeldung.com/javax-validation zu sehen.Schau Abschnitt 5, wie ein Validator programmatisch genutzt werden kann.
 

Oneixee5

Top Contributor
Das ist eine merkwürdige Art den Wert zu prüfen.
Java:
package snippets.validators;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MinValue implements ConstraintValidator<snippets.annotations.MinValue, Long> {
    public boolean isValid(Long value, ConstraintValidatorContext context) {
        if (value == null) {
            return false;
        }

        if (value.longValue() >= 10) {
            return true;
        }

        return false;
    }
}
Ich denke jede statische Codeprüfung meckert das an.
Java:
    public boolean isValid(final Long value, final ConstraintValidatorContext context) {
        return value != null && value.longValue() >= 10L;
    }
 

KonradN

Super-Moderator
Mitarbeiter
Und dann ggf. noch das .longValue() weglassen - ein einfaches return value != null && value >= 10L; tut es auch und Java führt ein einfaches unboxing durch:

Java Language Specification für die, die es interessiert:
Bei einem >= Operator findet nach 15.20.1 der Java Language Specification eine "Binary numeric promotion" statt (5.6)
Die Binary numeric promotion ist bei einem Referenztyp ein unboxing.
  1. If any expression is of a reference type, it is subjected to unboxing conversion (§5.1.8).
 

Oneixee5

Top Contributor
Es gibt manchmal Projekte, in denen Autoboxing nicht erwünscht ist. Deshalb habe ich es dran gelassen - hätte es aber erwähnen sollen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
neurox Tutorial: Hibernate mit MySQL (erste Schritte) Allgemeine Java-Themen 34
T Erste Schritte in JNI Allgemeine Java-Themen 17
J String nur erste Zeichen vergleichen Allgemeine Java-Themen 6
M RS232 nur erste Übertragung korrekt Allgemeine Java-Themen 7
FoolMoon Datei zeilenweise einlesen, aber nicht die erste Zeile! Allgemeine Java-Themen 3
byte Erste Zeile einer Textdatei entfernen Allgemeine Java-Themen 5
S JFileChooser und das erste Mal Allgemeine Java-Themen 10
G ANT Tutorial . Schritte bzgl. Junit Bibliothek Allgemeine Java-Themen 4
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
schegga_B AES-Algorithmus in javax.crypto Allgemeine Java-Themen 3
C Probleme mit javax.mail.Session Allgemeine Java-Themen 8
jumichel Eclipse The package javax.mail is not accessible Allgemeine Java-Themen 3
severin_96 javax.crypto.IllegalBlockSizeException Allgemeine Java-Themen 7
pkm javax.script.ScriptEngineManager gibt mir keine Engine Allgemeine Java-Themen 4
C javax.mail.Message message.setreplyto() null setzen (keine replyto Adresse) Allgemeine Java-Themen 25
E javax.mail sene Type ändern Allgemeine Java-Themen 2
RalleYTN javax.vecmath Transformationsmatrix für LWJGL3 Allgemeine Java-Themen 2
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
U javax.mail.Folder.list() zeigt nicht alle Ordner Allgemeine Java-Themen 5
T javax.script (JavaScript): Nicht-JRE-Packages importieren/nutzen Allgemeine Java-Themen 4
buggy84 JavaX und win32comm.dll Allgemeine Java-Themen 3
N javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] Allgemeine Java-Themen 3
Q javax.crypto.BadPaddingException - was ist das genau? Allgemeine Java-Themen 9
H Java Mail Fehlermeldung: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException Allgemeine Java-Themen 5
G Wie installiere ich javax-usb unter windows? Allgemeine Java-Themen 0
B Javax.Sound Problem (setMessage-Methode) Allgemeine Java-Themen 2
P javax.mail MessageCount Allgemeine Java-Themen 13
I javax.sound.sampled.* - Hilfe zu den Controls Allgemeine Java-Themen 8
E NoClassDefFoundError: javax/microedition/io/Connection Allgemeine Java-Themen 2
J javax.comm findet serielle ports nicht Allgemeine Java-Themen 2
B Eclipse [Ubuntu] Paket javax.media.* nicht gefunden Allgemeine Java-Themen 7
J package javax.servlet does not exist Allgemeine Java-Themen 5
T Wo ist javax.swing.TransferHandler enthalten? Allgemeine Java-Themen 10
M System.setProperty("javax.net.ssl.trustStore", "mykey.pkx"); Allgemeine Java-Themen 1
G javax.jms.IllegalStateException: This method. Allgemeine Java-Themen 4
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
M Netbeans IDE und javax.comm 2.0 Allgemeine Java-Themen 4
O javax.comm ? Allgemeine Java-Themen 3
L Fehlende Teile des javax Packages Allgemeine Java-Themen 3
P welche java version für javax.mail? Allgemeine Java-Themen 7
L javax.comm unter Linux Allgemeine Java-Themen 11
G javax.comm bzw serielle Schhnittstelle? Allgemeine Java-Themen 2
S Fehler bei der javax.usb api Allgemeine Java-Themen 2
reibi javax.crypto.SecretKey - Einfaches Beispiel gewünscht ;-) Allgemeine Java-Themen 2
K javax.comm Problem beim starten aus .jar heraus Allgemeine Java-Themen 3
foobar Rxtx vs javax.comm Allgemeine Java-Themen 2
T Exception at javax.swing.plaf.basic.BasicTableUI.paintCell Allgemeine Java-Themen 3
T Wo kann ich Javax.Comm Api Downloaden ? Allgemeine Java-Themen 6
C [javax.mail] Betreff vergleichen Allgemeine Java-Themen 5
C [javax.mail] Folder not open Allgemeine Java-Themen 2
H javax.comm und Parallele Schnittstelle (PIN für PIN) Allgemeine Java-Themen 7
S Javax.comm Probleme mit Ansteuerung eines 8051 EEPROMs Allgemeine Java-Themen 8
F Problem beim Drucken mit javax.print Allgemeine Java-Themen 2
M javax.mail – Sending failed – Invalid Addresses Allgemeine Java-Themen 8
S RS232 mit javax.comm Allgemeine Java-Themen 5
N javax.security.sasl verzweifelt gesucht Allgemeine Java-Themen 2
P javax.sound: clip.stop(); Allgemeine Java-Themen 4
S javax.comm unter Windows XP Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben