Die Datenüberprüfung ist eine unverzichtbare Funktion interaktiver Websites und kann die meisten Überprüfungsaufgaben abdecken, z. B. die Eindeutigkeit des Benutzernamens, das Geburtstagsformat, die Überprüfung des E-Mail-Formats usw. Um jedoch zu verhindern, dass Benutzer den Browser umgehen und http-Tools verwenden, um illegale Daten direkt vom Backend anzufordern, ist auch eine serverseitige Datenüberprüfung erforderlich, um zu verhindern, dass schmutzige Daten in die Datenbank gelangen Die Datenbank wird ebenfalls beschädigt Es wird dem Betriebs- und Wartungspersonal Kopfschmerzen bereiten. Sie können die in diesem Artikel beschriebene Validierung verwenden, um die Daten zu überprüfen.
1.JSR303/JSR-349: JSR303 ist ein Standard, der nur Spezifikationen, aber keine Implementierung bereitstellt. Er legt einige Überprüfungsspezifikationen fest, wie z. B. @Null, @NotNull. @Pattern, befindet sich im Paket javax.validation.constraints. JSR-349 ist die aktualisierte Version, die einige neue Funktionen hinzufügt.
@Null Das mit Anmerkungen versehene Element muss null sein
@NotNull Das mit Anmerkungen versehene Element darf nicht null sein
@AssertTrue Das mit Anmerkungen versehene Element muss wahr sein
@AssertFalse Das mit Anmerkungen versehene Element muss falsch sein
@Min(Wert) Das mit Anmerkungen versehene Element muss eine Zahl sein, sein Wert muss größer oder gleich dem angegebenen Mindestwert sein
@Max(Wert) Das mit Anmerkungen versehene Element muss eine Zahl sein, sein Wert muss sein kleiner oder gleich dem angegebenen Maximalwert
@DecimalMin(value) Das mit Anmerkungen versehene Element muss eine Zahl sein und sein Wert muss größer oder gleich dem angegebenen Mindestwert sein
@DecimalMax(value) Das Das mit Anmerkungen versehene Element muss eine Zahl sein, sein Wert muss kleiner oder gleich dem angegebenen Maximalwert sein.
@Size(max, min) Die Größe des mit Anmerkungen versehenen Elements muss innerhalb des angegebenen Bereichs liegen. Ganzzahl, Bruch) Das mit Anmerkungen versehene Element muss eine Zahl sein, deren Wert innerhalb des akzeptablen Bereichs liegen muss
@ Pattern(value) Das mit Anmerkungen versehene Element muss dem angegebenen regulären Ausdruck entsprechen<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
@SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); System.out.println("Start app success."); } }
public class Person { @NotEmpty(message = "name不能为空") private String name; @Range(min = 0, max = 100, message = "age不能大于100小于0") private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
@RequestMapping("/test") public String valid(@Validated Person person, BindingResult bindingResult) { if (bindingResult.hasErrors()) { for (FieldError fieldError : bindingResult.getFieldErrors()) { System.out.println(fieldError); } return "fail"; } return "success"; }
@RequestMapping(value = "valid", method = RequestMethod.GET) public String valid(@Validated Person person) { System.out.println(person); return "success"; }
@RestControllerAdvice public class BindExceptionHanlder { @ExceptionHandler(BindException.class) public String handleBindException(HttpServletRequest request, BindException exception) { List<FieldError> allErrors = exception.getFieldErrors(); StringBuilder sb = new StringBuilder(); for (FieldError errorMessage : allErrors) { sb.append(errorMessage.getField()).append(": ").append(errorMessage.getDefaultMessage()).append(", "); } System.out.println(sb.toString()); return sb.toString(); } }
输出:age: age不能大于100小于0,
4、自定义校验注解
4.1 @NameValidation
@Documented @Constraint(validatedBy = NameValidationValidator.class) @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RUNTIME) public @interface NameValidation { String message() default "不是合法的名字"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; @Target({PARAMETER, ANNOTATION_TYPE}) @Retention(RUNTIME) @Documented @interface List { NameValidation[] value(); } }Nach dem Login kopieren4.2 校验类NameValidationValidator
public class NameValidationValidator implements ConstraintValidator<NameValidation, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { if ("steven".equalsIgnoreCase(value)) { return true; } String defaultConstraintMessageTemplate = context.getDefaultConstraintMessageTemplate(); System.out.println("default message :" + defaultConstraintMessageTemplate); //禁用默认提示信息 //context.disableDefaultConstraintViolation(); //设置提示语 //context.buildConstraintViolationWithTemplate("can not contains blank").addConstraintViolation(); return false; } }Nach dem Login kopieren4.3 在Person类增加新注解
@NotEmpty(message = "name不能为空") @NameValidation private String name;Nach dem Login kopieren测试: http://localhost:8080/valid?age=105&name=lxy
输出:age: age不能大于100小于0, name: 不是合法的名字,
Das obige ist der detaillierte Inhalt vonWie SpringBoot die Validierung nutzt, um elegante Verifizierungsparameter zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!