Mukautetut validaattorit
Kirjoittakaa omat validointirajoitteenne.
Mukautetut validaattorit on ilmainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 4 oppituntia.
Kun sisäänrakennetut rajoitteet eivät riitä
Vakiomuotoiset rajoitteet eivät pysty ilmaisemaan kaikkia sääntöjä — esimerkiksi kelvollista kuponkikoodin muotoa, tietyn alueen puhelinnumeroa tai arvoa, jonka on oltava olemassa tietokannassa. Tällaisia tapauksia varten kirjoitetaan mukautettu rajoite, jonka taustalla toimii validaattori.
Mukautetun rajoitteen kaksi osaa
Mukautettu rajoite koostuu kahdesta osasta:
- annotaatio, joka sijoitetaan kenttiin tai parametreihin
- ConstraintValidator, joka sisältää varsinaisen tarkistuslogiikan
Annotaation määrittäminen
Luo annotaatio ja yhdistä se validaattoriinsa @Constraint-annotaatiolla. Määritä määrityksen edellyttämät vakiom成员 message, groups ja payload.
@Target({ FIELD, PARAMETER })
@Retention(RUNTIME)
@Constraint(validatedBy = StrongPasswordValidator.class)
public @interface StrongPassword {
String message() default "Password is not strong enough";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}ConstraintValidator-toteutuksen tekeminen
Validaattori toteuttaa rajapinnan ConstraintValidator<Annotation, Type> ja korvaa metodin isValid. Palauta true, kun arvo täyttää säännön.
public class StrongPasswordValidator
implements ConstraintValidator<StrongPassword, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext ctx) {
if (value == null) return true; // let @NotNull handle null
return value.length() >= 8
&& value.chars().anyMatch(Character::isDigit)
&& value.chars().anyMatch(Character::isUpperCase);
}
}Null-arvojen käsittelyn käytäntö
Käytännön mukaan mukautettu validaattori käsittelee null-arvon kelvollisena ja jättää null-arvon tarkistamisen @NotNull-annotaatiolle. Näin rajoitteet voidaan yhdistää joustavasti — kukin sääntö hoitaa yhden tehtävän.
Mukautetun rajoitteen käyttäminen
Käytä omaa annotaatiotasi samalla tavalla kuin sisäänrakennettua annotaatiota. Kun se yhdistetään ohjaimen @Valid-annotaatioon, se osallistuu normaaliin validointiprosessiin.
public class CreateUserRequest {
@NotBlank
@StrongPassword
private String password;
}Mukautetut virheilmoitukset
Metodissa isValid voit poistaa oletusviestin käytöstä ja lisätä asiayhteyteen sopivan viestin. Tämä on hyödyllistä, kun yksi annotaatio valvoo useita alisääntöjä.
ctx.disableDefaultConstraintViolation();
ctx.buildConstraintViolationWithTemplate(
"Password must include a digit and an uppercase letter")
.addConstraintViolation();
return false;Bean-komponenttien injektointi validaattoriin
ConstraintValidator on Spring-bean, joten siinä voidaan käyttää konstruktorin kautta tehtävää injektointia — näin voidaan toteuttaa sääntöjä, jotka tarkistavat tietoja repositoriosta tai palvelusta, kuten yksilöllisyyden tarkistuksia.
public class UniqueEmailValidator
implements ConstraintValidator<UniqueEmail, String> {
private final UserRepository repo;
public UniqueEmailValidator(UserRepository repo) { this.repo = repo; }
@Override
public boolean isValid(String email, ConstraintValidatorContext ctx) {
return email == null || !repo.existsByEmail(email);
}
}Luokkatasoiset rajoitteet
Jotkin säännöt koskevat useita kenttiä — esimerkiksi "salasanan on oltava sama kuin confirmPassword-kentän arvon". Kohdista annotaatio TYPE-kohteeseen ja validoi koko objekti käsittelemällä useita kenttiä yhdessä.
@Target(TYPE)
@Retention(RUNTIME)
@Constraint(validatedBy = PasswordsMatchValidator.class)
public @interface PasswordsMatch {
String message() default "Passwords do not match";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}Alustuskohta
Korvaa initialize, jotta voit lukea annotaatioinstanssin määritteet, kuten määritettävissä olevan vähimmäispituuden, ennen validoinnin suorittamista.
@Override
public void initialize(StrongPassword ann) {
this.minLength = ann.minLength();
}Pidä validaattorit puhtaina ja nopeina
Validaattorit suoritetaan jokaisen pyynnön yhteydessä, joten pidä ne mahdollisuuksien mukaan nopeina ja sivuvaikutuksettomina. Tietokantaan perustuvat tarkistukset ovat sopivia, mutta niiden tulisi käyttää indeksejä ja olla kevyitä, jotta ne eivät hidasta pyyntöjen käsittelyä.
Pikatarkistus
Testaa ymmärryksesi mukautetuista validaattoreista.
Kertaus
Mukautetut validaattorit laajentavat Bean Validationia.
- Rajoite koostuu
@Constraint-annotaatiosta jaConstraintValidator-toteutuksesta - Korvaa
isValid; käsittelenullkäytännön mukaisesti kelvollisena - Validaattorit ovat beaneja, joten ne tukevat konstruktorin kautta tehtävää injektointia
- Käytä luokkatasoisia rajoitteita kenttien välisiin sääntöihin
- Muokkaa viestejä validointikontekstin kautta
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 24
- Oppitunnit
- 93
Usein kysytyt kysymykset
Onko oppitunti ”Mukautetut validaattorit” ilmainen?
Kyllä – oppitunnin ”Mukautetut validaattorit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssin, päivitä CoddyKit PROhon. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Mukautetut validaattorit”?
Kirjoittakaa omat validointirajoitteenne. Harjoittelet Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Mukautetut validaattorit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunnilla?
Kyllä. Jokainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Bean-validointi @Valid-annotaatiolla
- Mukautetut validaattorit
- @ControllerAdvice ja @ExceptionHandler
- Problem Details (RFC 7807)