Tatsächlich ist es eine Methode, mit der benutzerdefinierte Anmerkungen durch @constraint definiert werden können.
@Constraint (validatedby = xxxx.class)
Im Folgenden finden Sie ein Codebeispiel für die Java -benutzerdefinierte Annotation, die ich zur Implementierung von Vorder- und Backend -Parameterüberprüfung vorgenommen habe
Wenn Sie daran interessiert sind, lesen Sie es bitte sorgfältig durch und lernen Sie es sorgfältig kennen:
Paket Sonn.sonnannotation; Import Java.lang.annotation.Documented; Import Java.lang.annotation javax.validation.constraintvalidator; import javax.validation.constraintvalidatorcontext; Import Javax.Validation 2016-7-25 8:22:58 pm * @version 1.0 */@Target({ElementType.FIELD, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = IsValidString.ValidStringChecker.class)@Documentedpublic @interface IsValidString { String message() default "The string is ungültig."; Klasse <?> [] Gruppen () Standard {}; Klasse <? erweitert Payload> [] payload () Standard {}; class ValidStringChecker implements ConstraintValidator<IsValidString,String> { @Override public void initialize(IsValidString arg0) { } @Override public boolean isValid(String strValue, ConstraintValidatorContext context) { if(StringUtill.isStringEmpty(strValue)) { return true; } if (StrValue.Contains ("<")) {return false; } Return true; }}}Der obige Code definiert die Methodenlogik der Annotation durch @Constraint (validatedBy = isvalidstring.validstringChecker.class)-die innere Klasse der Annotationsklasse namens ValidStringChecker.
Diese interne Klasse implementiert den ConstraintValidator <isvalidstring, String> Schnittstelle
Die offizielle Dokumentation beschreibt es so:
Javax.Validation
Schnittstellenbeschränkung Validator <a erweitert Annotation, t>
•
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
öffentliche Schnittstelle ConstraintValidator <a erweitert Annotation, t> definiert die Logik, um eine bestimmte Einschränkung a für einen bestimmten Objekttyp T zu validieren.
Implementierungen müssen den folgenden Einschränkungen entsprechen:
• T muss auf einen nicht parametrisierten Typ auflösen
• oder generische Parameter von T müssen unbegrenzte Platzhaltertypen sein
Die Annotation unterstützte ValidationTarget kann in eine Implementierung von ConstraintValidator aufgenommen werden, um sie als Unterstützung von Cross-Parameter-Einschränkungen zu markieren. Weitere Informationen finden Sie unter Unterstützung von SupportedValidationTarget und Einschränkungen.
Die implementierte Isvalid -Methode ist die Überprüfungsmethode dieser Schnittstelle.
Testen Sie den Effekt und fügen Sie Anmerkungen zum zu überprüfenden Entitätsklassenfeld hinzu:
Schreiben Sie die Artikelseite, fügen Sie '<' in den Artikel -Titel hinzu und senden Sie:
Die Einreichung ist mit einem Fehler von 500 fehlgeschlagen, was darauf hinweist, dass die Annotation wirksam wird:
Aber es gibt immer noch Probleme damit. Meine Blog -Website kann die Fehlermeldung nicht direkt ausdrucken. Sie müssen noch eine Fehlerseite erstellen.
Dies ist einfach, fügen Sie den Fehlerseitenpfad unter web.xml hinzu und erstellen Sie dann eine Seite:
<Regelpage>
<Fehlercode> 500 </Fehlercode>
<Position> /Error.jsp </location>
</Fehlerpage>
Lassen Sie uns zunächst einige grundlegende Konzepte vorstellen:
1.Java definiert eine Annotation mit @Interface xx {}.
Annotation ist eigentlich nicht mysteriös, sie ist nur ein Zeichen. Wenn das Programm an der Marke ausgeführt wird, wird die entsprechende Logik ausgeführt. Anmerkungen selbst sind eine Klasse.
2. Bei der Definition von Anmerkungen kann die Kennzeichnung einiger Annotationen spezifische Bedeutungen darstellen:
@Retention (retentionPolicy.source) // Die Annotation ist nur im Quellcode vorhanden und enthält sie nicht in der Klassen -Bytecode -Datei.
@Retention (retentionPolicy.class) // In der Standard -Aufbewahrungsrichtlinie wird die Annotation in der Klassen -Bytecode -Datei vorhanden, kann jedoch während der Laufzeit nicht erhalten werden.
@Retention (RetentionPolicy.Runtime) // Die Annotation wird in der Klassen -Bytecode -Datei vorhanden und können zur Laufzeit durch Reflexion erhalten werden.
(Die Laufzeit ist erwähnenswert, weil es bedeutet, dass sie durch Reflexion abgerufen werden kann)
@Target (elementtype.type) // Schnittstelle, Klasse, Aufzählung, Annotation
@Target (elementtype.field) // Konstante für Felder und Enums
@Target (elementtype.method) // Methode
@Target (elementtype.parameter) // Methodenparameter
@Target (elementtype.Constructor) // Konstruktor
@Target (elementtype.local_variable) // Lokale Variablen
@Target (elementtype.annotation_type) // Annotation
@Target (elementtype.package) // paket
Es gibt eine Möglichkeit, @Taget (xx) und @Retention (RetentionPolicy.Runtime) bei der Definition von Anmerkungen hinzuzufügen, schreiben jedoch keine Methoden in den Anmerkungen. Sie verwenden nur den Reflexionsmechanismus, um die Anmerkungen zur Laufzeit zu erhalten, und schreiben dann die entsprechende Logik selbst (den sogenannten Annotationsparser).
Wahrscheinlich eine ähnliche Art zu schreiben:
importieren java.lang.annotation Elementtype.field, elementtype.method}) @retention (retentionPolicy.runtime) public @Interface validate {public int min () Standard 1; public int max () Standard 10; public boolean isnotnull () Standard true;}Wenn Sie später laufen, verwenden Sie Reflection, um Anmerkungen zu erhalten, und ich werde die Details nicht besprechen.
Ich fand diese Art von technischen Artikeln dazu, bevor ich nach technischen Artikeln im Internet suchte, was mir zu dieser Zeit große Verwirrung brachte. Ich glaube nicht, dass ich will.
Das obige Beispiel für die benutzerdefinierte Java -Annotation zur Implementierung von Vorder- und Backend -Parameterüberprüfung ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.