Java Academy · Oppitunti

Bean Validation: @NotNull, @Size, @Pattern

Merkitse DTO:t Bean Validation -rajoitteilla ja käynnistä validointi ohjaimissa @Valid-annotaatiolla.

Oppitunti 1/413 vaihetta

Bean Validation: @NotNull, @Size, @Pattern on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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 Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä Bean Validation on

Bean Validation (Jakarta Bean Validation 3.0) tarjoaa deklaratiiviset rajoiteannotaatiot Java-beaneille. Spring Boot määrittää validatorin automaattisesti ja käynnistää validoinnin @Valid- tai @Validated-annotaation avulla.

@NotNull, @NotEmpty, @NotBlank

@NotNull: arvo ei saa olla null. @NotEmpty: arvo ei saa olla null eikä tyhjä (merkkijonoissa ja kokoelmissa). @NotBlank: arvo ei saa olla null, tyhjä tai koostua pelkistä välilyönneistä. Suosikaa merkkijonoille @NotBlank-annotaatiota.

public record CreateUserRequest(
    @NotBlank(message = "Name is required")
    String name,
    @NotBlank @Email
    String email,
    @NotNull
    UserRole role
) {}

@Size ja @Length

@Size(min, max) rajoittaa merkkijonojen, kokoelmien, karttojen ja taulukoiden kokoa. @Length (Hibernate) toimii vain merkkijonoilla. Suosikaa siirrettävyyden vuoksi @Size-annotaatiota.

@Size(min = 3, max = 50, message = "Name must be 3-50 characters")
private String name;
@Size(min = 1, max = 10, message = "Cart must have 1-10 items")
private List<CartItem> items;

@Min, @Max, @Positive, @Range

Numeeriset rajoitteet: @Min/@Max täsmällisille rajoille, @Positive/@PositiveOrZero etumerkkirajoitteille ja @DecimalMin/@DecimalMax BigDecimal-arvoille.

@Min(1) @Max(100)
private int quantity;
@DecimalMin("0.01") @DecimalMax("99999.99")
private BigDecimal price;
@Positive
private long orderId;

@Pattern säännöllisen lausekkeen tarkistukseen

@Pattern(regexp) tarkistaa merkkijonot säännöllisen lausekkeen perusteella. Se sopii esimerkiksi puhelinnumeroiden, postinumeroiden ja mukautettujen muotojen tarkistamiseen.

@Pattern(regexp = "^\\+?[1-9]\\d{7,14}$", message = "Invalid phone number")
private String phone;
@Pattern(regexp = "^[A-Z]{2}\\d{5}$", message = "Invalid postal code (e.g. AB12345)")
private String postalCode;

@Email ja @URL

@Email tarkistaa sähköpostiosoitteen muodon (RFC 5321:n perustasolla). @URL (Hibernate) tarkistaa URL-osoitteen muodon. Yhdistäkää nämä aina @NotBlank-annotaatioon, koska ne sallivat null-arvon.

@NotBlank @Email
private String email;
// Hibernate-specific:
@URL(protocol = "https")
private String profileUrl;

@Past, @Future, @PastOrPresent

Ajalliset rajoitteet tarkistavat päivämäärä- ja aika-arvot. Ne toimivat esimerkiksi LocalDate-, LocalDateTime- ja Instant-tyyppien kanssa.

@Past(message = "Birth date must be in the past")
private LocalDate birthDate;
@Future(message = "Expiry must be in the future")
private LocalDate expiryDate;

Validoinnin käynnistäminen @Valid-annotaatiolla

Lisätkää @Valid controller-metodin parametriin. Spring validoi olion ja heittää virheen sattuessa MethodArgumentNotValidException-poikkeuksen, jolloin palautetaan 400 Bad Request -vastaus.

@PostMapping("/users")
public ResponseEntity<UserDto> create(@Valid @RequestBody CreateUserRequest req) {
    User user = userService.create(req);
    return ResponseEntity.status(201).body(UserDto.from(user));
}

Ketjutettu validointi kenttien @Valid-annotaatiolla

Lisätkää sisäkkäisten olioiden validoimiseksi kenttään @Valid luokkatason rajoitteiden lisäksi.

public record OrderRequest(
    @NotNull @Valid
    AddressRequest shippingAddress, // validates AddressRequest constraints too
    @Valid @NotEmpty
    List<@Valid LineItemRequest> items
) {}

Validointiryhmät

Käyttäkää ryhmiä, kun haluatte soveltaa eri rajoitteita eri tilanteissa (esimerkiksi Create- ja Update-toiminnoissa). Merkitkää rajoitteet ryhmärajapinnalla ja käynnistäkää validointi käyttämällä @Validated(CreateGroup.class)-annotaatiota.

public interface CreateGroup {}
public interface UpdateGroup {}
public record UserRequest(
    @NotBlank(groups = CreateGroup.class) String password,
    @NotNull(groups = UpdateGroup.class)  Long id
) {}
// Controller:
@PutMapping("/{id}")
public UserDto update(@Validated(UpdateGroup.class) @RequestBody UserRequest req) { ... }

Validointivirheiden lukeminen

Ottakaa MethodArgumentNotValidException kiinni @ControllerAdvice-luokassa, jotta voitte poimia kenttävirheet ja muodostaa rakenteisen virhevastaauksen.

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidation(MethodArgumentNotValidException ex) {
    Map<String, String> errors = new LinkedHashMap<>();
    ex.getBindingResult().getFieldErrors().forEach(e ->
        errors.put(e.getField(), e.getDefaultMessage()));
    return ResponseEntity.badRequest().body(errors);
}

Pikatarkistus

Mikä annotaatio tarkistaa, että String ei ole null eikä tyhjä eikä sisällä pelkkiä välilyöntejä?

Kertaus

Merkitkää DTO:t Bean Validation -rajoitteilla. Lisätkää controllereihin @Valid validoinnin käynnistämiseksi. Käyttäkää merkkijonoille @NotBlank-annotaatiota, pituuksille @Size-annotaatiota, säännöllisille lausekkeille @Pattern-annotaatiota ja päivämäärille @Past/@Future-annotaatioita. Käsitelkää virheet @ControllerAdvice-luokassa.

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
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Bean Validation: @NotNull, @Size, @Pattern” ilmainen?

Kyllä – oppitunnin ”Bean Validation: @NotNull, @Size, @Pattern” 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 Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Bean Validation: @NotNull, @Size, @Pattern”?

Merkitse DTO:t Bean Validation -rajoitteilla ja käynnistä validointi ohjaimissa @Valid-annotaatiolla. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Bean Validation: @NotNull, @Size, @Pattern”-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ä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-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 Validation: @NotNull, @Size, @Pattern
  2. Mukautetut rajoiteannotaatiot
  3. Poikkeusten keskitetty käsittely @ControllerAdvice-annotaatiolla
  4. RFC 7807:n ongelmatiedot ja yhdenmukaiset virhevastaustaukset
← Takaisin: Java Academy