Heim >Java >javaLernprogramm >Detaillierte Erläuterung der Verwendung der Validierungshintergrundparameterüberprüfung in Java

Detaillierte Erläuterung der Verwendung der Validierungshintergrundparameterüberprüfung in Java

黄舟
黄舟Original
2017-10-20 09:47:322329Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung der Java-Validierungs-Hintergrundparameterüberprüfung vorgestellt. Der Herausgeber findet es ziemlich gut. Jetzt werde ich es mit Ihnen teilen und als Referenz geben. Folgen wir dem Editor und werfen wir einen Blick darauf.

1. Einführung

Während des Hintergrundentwicklungsprozesses wird die Überprüfung von Parametern zu einem unverzichtbaren Bestandteil der Entwicklungsumgebung. Parameter dürfen beispielsweise nicht null sein und E-Mails müssen dem E-Mail-Format entsprechen. Wenn Sie manuell Beurteilungen durchführen oder reguläre Ausdrücke zur Beurteilung schreiben, ist die Entwicklungseffizienz zu langsam und Sie geraten im Zeitspiel zwangsläufig ins Hintertreffen , Kosten und Qualität. Daher ist die Abstraktion der Verifizierungsschicht ein unvermeidliches Ergebnis. Hier sind mehrere Lösungen.

2. Mehrere Lösungen

1. Die Gültigkeit von struts2 kann per XML konfiguriert werden. Die Regeln und zurückgegebenen Informationen werden in XML beschrieben. Diese Methode ist problematischer und weist eine geringe Entwicklungseffizienz auf und wird nicht empfohlen.

2. Die Validierungs-Bean basiert auf dem JSR-303-Standard und wird mithilfe von Annotationen implementiert, was sehr praktisch ist, aber nicht ist nur eine Schnittstelle und hat keine spezifische Implementierung. Es implementiert die Validierungs-Bean und ist relativ leistungsfähig 🎜>

Klicken Sie hier, um die chinesische Version anzuzeigen. Offizielles Handbuch

3. Oval ist ein erweiterbares Java-Objektdatenüberprüfungs-Framework, das über Konfigurationsdateien festgelegt werden kann. Anmerkung und POJOs. Sie können reine Java-Sprache, JavaScript, Groovy, BeanShell usw. verwenden, um Regeln zu schreiben. Diesmal werde ich nicht zu viel erklären

3. Einführung in die Überprüfung des Bean-Validierungs-Frameworks

Das Bean-Validierungspaket wird auf Maven verwaltet. Die Koordinaten des neuesten Pakets lauten wie folgt:


<dependency>

  <groupId>javax.validation</groupId>

  <artifactId>validation-api</artifactId>

  <version>1.1.0.Final</version>

</dependency>
Klicken Sie hier, um es anzuzeigen die neueste Koordinatenadresse

Herunterladen Nach dem Öffnen dieses Pakets gibt es ein Paket namens Constraints, das Verifizierungsanmerkungen enthält:

 

Beginnen wir mit dem Üben mit dem Code:

1. Definieren Sie eine zu verifizierende Bean: Student.java


package com.shishang;

import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

public class Student implements Serializable {


  @NotNull(message = "名字不能为空")
  private String name;

  @Size(min = 6,max = 30,message = "地址应该在6-30字符之间")
  private String address;

  @DecimalMax(value = "100.00",message = "体重有些超标哦")
  @DecimalMin(value = "60.00",message = "多吃点饭吧")
  private BigDecimal weight;

  private String friendName;
  @AssertTrue
  private Boolean isHaveFriend(){
    return friendName != null?true:false;
  }

  @Future(message = "生日必须在当前实践之前")
  private Date birthday;

  @Pattern(regexp = "^(.+)@(.+)$",message = "邮箱的格式不合法")
  private String email;


  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getAddress() {
    return address;
  }

  public void setAddress(String address) {
    this.address = address;
  }

  public BigDecimal getWeight() {
    return weight;
  }

  public void setWeight(BigDecimal weight) {
    this.weight = weight;
  }

  public String getFriendName() {
    return friendName;
  }

  public void setFriendName(String friendName) {
    this.friendName = friendName;
  }

  public Date getBirthday() {
    return birthday;
  }

  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }

  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }
}
2. Testklasse: StudentTest.java



package com.use;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

public class StudentTest implements Serializable {
  public static void main(String[] args) {
    Student xiaoming = getBean();
    List<String> validate = validate(xiaoming);
    validate.forEach(row -> {
      System.out.println(row.toString());
    });

  }

  private static Student getBean() {
    Student bean = new Student();
    bean.setName(null);
    bean.setAddress("北京");
    bean.setBirthday(new Date());
    bean.setFriendName(null);
    bean.setWeight(new BigDecimal(30));
    bean.setEmail("xiaogangfan163.com");
    return bean;
  }

  private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

  public static <T> List<String> validate(T t) {
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);

    List<String> messageList = new ArrayList<>();
    for (ConstraintViolation<T> constraintViolation : constraintViolations) {
      messageList.add(constraintViolation.getMessage());
    }
    return messageList;
  }
}
3. Führen Sie die testValidation()-Methode aus. Die Ausgabe lautet wie folgt:

  1. Die Adresse sollte zwischen 6 und 30 liegen Zeichen

  2. Das Format der E-Mail ist illegal

  3. Der Geburtstag muss vor der aktuellen Uhrzeit liegen

  4. Iss mehr Essen

  5. Der Name darf nicht leer sein

4. Zusammenfassung


  1. Wie @NotNull, @Size usw. sind relativ einfach und leicht zu verstehen, es gibt nicht viel zu sagen

  2. Da die Bean-Validierung nur eine Schnittstelle bereitstellt, diese jedoch nicht implementiert Bei der Verwendung muss ein Anbieterpaket hinzugefügt werden, z. B. hibernate-validator

  3. @Pattern Da es sich um ein reguläres Muster handelt, kann es mehr Dinge tun, z. B. Chinesisch, Zahlen, E-Mail, Länge usw.

  4. @AssertTRue Dies unterscheidet sich von anderen Mustern. Es gibt einen wesentlichen Unterschied in der Validierungsanmerkung. Diese Anmerkung gilt für mehrere Felder. Im Beispiel basiert die Methode isHaveFriend auf der Überprüfung des Felds „friendName“

  5. . Die Überprüfungs-API wurde von mir verarbeitet, sodass die Überprüfungsinformationen stapelweise zurückgegeben werden können

  6. Manchmal werden die von uns benötigten Anmerkungen möglicherweise nicht bereitgestellt. In diesem Fall müssen wir Anmerkungen anpassen und Implementierungsklassen schreiben

4. Benutzerdefinierte Bean-Validierung, Annotationsvalidierung

Manchmal kann das integrierte Framework unsere Anforderungen nicht erfüllen. Das ist nicht schwer, lass uns weiter unten darüber reden.

In diesem Beispiel wird überprüft, ob es sich bei der Zeichenfolge um eine Groß- oder Kleinschreibung handelt. Der Code lautet wie folgt:

1. Aufzählungstyp, um den Groß- oder Kleinbuchstabenmodus darzustellen


2. Definieren Sie eine CheckCase-Einschränkungsanmerkung

 package com.defineconstrain;

/**
 * created by xiaogangfan
 * on 16/10/25.
 */
public enum CaseMode {
  UPPER,
  LOWER;
}



3. Constraint CheckCase-Validator

package com.defineconstrain;

/**
 * created by xiaogangfan
 * on 16/10/25.
 */
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;

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

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

@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = CheckCaseValidator.class)
@Documented
public @interface CheckCase {

  String message() default "{com.mycompany.constraints.checkcase}";

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

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

  CaseMode value();

}



4. Fügen Sie ein Attribut in Student.java hinzu

package com.defineconstrain;

/**
 * created by xiaogangfan
 * on 16/10/25.
 */
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class CheckCaseValidator implements ConstraintValidator<CheckCase, String> {

  private CaseMode caseMode;

  public void initialize(CheckCase constraintAnnotation) {
    this.caseMode = constraintAnnotation.value();
  }

  public boolean isValid(String object, ConstraintValidatorContext constraintContext) {

    if (object == null)
      return true;

    if (caseMode == CaseMode.UPPER)
      return object.equals(object.toUpperCase());
    else
      return object.equals(object.toLowerCase());
  }

}


5 eine Zeile

@CheckCase(value = CaseMode.LOWER,message = "名字的拼音需要小写")
private String spellName;


zur getBean()-Methode. 6. Führen Sie die testValidation()-Methode aus. Die Ausgabe lautet wie folgt:

bean.setSpellName("XIAOGANGFAN");

Die Adresse sollte zwischen 6 und 30 Zeichen lang sein
  1. Das Format der E-Mail ist illegal
  2. Der Geburtstag muss vor dem liegen aktuelle Uhrzeit
  3. Mehr essen
  4. Das Pinyin des Namens muss klein geschrieben werden
  5. Der Name darf nicht leer sein

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der Validierungshintergrundparameterüberprüfung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn