Pengesahan data ialah fungsi penting bagi laman web interaktif Pengesahan js bahagian hadapan boleh merangkumi kebanyakan tanggungjawab pengesahan, seperti keunikan nama pengguna, format hari lahir, Pengesahan yang biasa digunakan seperti pengesahan format e-mel. dan seterusnya. Walau bagaimanapun, untuk menghalang pengguna daripada memintas penyemak imbas dan menggunakan alat http untuk meminta secara langsung beberapa data haram dari bahagian belakang, pengesahan data sisi pelayan juga diperlukan untuk mengelakkan data kotor daripada jatuh ke dalam pangkalan data Jika format e-mel yang tidak sah muncul pangkalan data, ia juga akan Ia akan menyebabkan sakit kepala untuk kakitangan operasi dan penyelenggaraan. Anda boleh menggunakan pengesahan yang diterangkan dalam artikel ini untuk mengesahkan data.
1. Null, @NotNull, @Pattern, terletak di bawah pakej javax.validation.constraints. JSR-349 ialah versinya yang dinaik taraf, menambah beberapa ciri baharu.
@Null Elemen beranotasi mestilah batal
@NotNull Unsur beranotasi mestilah tidak batal
@AssertTrue Elemen beranotasi mestilah benar
@AssertFalse Elemen beranotasi mestilah palsu
@Min( nilai) Beranotasi elemen mestilah nombor dan nilainya mestilah lebih besar daripada atau sama dengan nilai minimum yang ditentukan
@Max(value) Elemen beranotasi mestilah nombor dan nilainya mestilah kurang daripada Sama dengan nilai maksimum yang ditentukan
@DecimalMin(value) Elemen beranotasi mestilah nombor dan nilainya mestilah lebih besar daripada atau sama dengan nilai minimum yang ditentukan
@DecimalMax(value) Elemen beranotasi mestilah nombor dan nilainya mestilah kurang daripada atau sama dengan nilai maksimum yang ditentukan
@Size (maks, min) Saiz elemen beranotasi Mesti dalam julat yang ditentukan
@Digit (integer, pecahan) Elemen beranotasi mestilah nombor dan nilainya mestilah dalam julat yang boleh diterima
@Lalu Elemen beranotasi mestilah tarikh lepas
@Masa Depan Elemen beranotasi mestilah tarikh akan datang
@Pattern(value) Elemen beranotasi mesti mematuhi ungkapan biasa yang ditentukan
2.pengesahan hibernate: pengesahan hibernate ialah pelaksanaan spesifikasi ini dan menambahkan beberapa anotasi pengesahan yang lain, seperti @Email, @Length, @Julat, dsb.
@Email Elemen beranotasi mestilah alamat e-mel
@Length Saiz rentetan beranotasi mestilah dalam julat yang ditentukan
@NotEmpty Rentetan beranotasi mestilah bukan kosong
@Julat Elemen beranotasi mestilah dalam julat yang sesuai
3. pengesahan musim bunga: pengesahan musim bunga merangkum semula pengesahan hibernate dan menambah pengesahan automatik dalam modul springmvc Dan maklumat pengesahan adalah dikapsulkan ke dalam kelas tertentu
Modul spring-web menggunakan hibernate -validation, dan modul databind juga menyediakan fungsi mengikat data yang sepadan.
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
Kami hanya perlu memperkenalkan kebergantungan spring-boot-starter-web Jika anda melihat sub-dependensinya, anda boleh menemui kebergantungan berikut:
<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; } }
springmvc menyediakan kami dengan fungsi merangkum parameter borang secara automatik, satu yang menambah parameter pengesahan Pengawal biasa ditunjukkan di bawah.
@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"; }
Nota:
Anotasi @Validated perlu ditambah sebelum parameter Persison, menunjukkan bahawa spring perlu mengesahkannya dan maklumat pengesahan akan disimpan ke BindingResult seterusnya. Ambil perhatian bahawa ia mesti bersebelahan Jika terdapat berbilang parameter yang perlu disahkan, borang tersebut boleh menjadi seperti berikut. sah(@Orang yang Disahkan, orang BindingResultBindingResult, @Orang2 yang Disahkan2, orang2BindingResult) iaitu, satu kelas pengesahan sepadan dengan satu hasil pengesahan.
Hasil pengesahan akan diisi secara automatik dan operasi tertentu boleh diputuskan berdasarkan logik perniagaan dalam pengawal, seperti melompat ke halaman ralat.
Pengesahan paling asas telah selesai
Mulakan bekas dan keputusan ujian adalah seperti berikut:
Kelas pengawal:Ralat medan dalam objek '. orang pada medan 'umur': nilai ditolak [105]; kod [Range.person.age,Range.age,Range.int,Range]; argumen [org.springframework.context.support.DefaultMessageSourceResolvable: codes [person.age] ,umur ]; argumen []; mesej lalai [umur],100,0]; 🎜>Kaedah sebelumnya Mengendalikan ralat pengesahan agak rumit, dan kebanyakan tapak web akan merangkum ralat permintaan dalam halaman 404 bersatu Jika pengesahan data gagal, but Spring akan mengeluarkan pengecualian BindException pulangkan hasilnya. Untuk menentukan kelas penangkapan pengecualian, gunakan @RestControllerAdvice.
@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(); } }Ujian: http://localhost:8080/valid?age=105&name=steven
输出:age: age不能大于100小于0,
@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(); } }
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; } }
@NotEmpty(message = "name不能为空") @NameValidation private String name;
测试: http://localhost:8080/valid?age=105&name=lxy
输出:age: age不能大于100小于0, name: 不是合法的名字,
Atas ialah kandungan terperinci Cara SpringBoot menggunakan pengesahan untuk melaksanakan parameter pengesahan yang elegan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!