Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät · Oppitunti

Mukautetut validaattorit

Kirjoittakaa omat validointirajoitteenne.

Oppitunti 2/413 vaihetta

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 ja ConstraintValidator-toteutuksesta
  • Korvaa isValid; käsittele null kä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
Aloita maksutta

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

  1. Bean-validointi @Valid-annotaatiolla
  2. Mukautetut validaattorit
  3. @ControllerAdvice ja @ExceptionHandler
  4. Problem Details (RFC 7807)
← Takaisin: Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät