Bean Validation: @NotNull, @Size, @Pattern
Merkitse DTO:t Bean Validation -rajoitteilla ja käynnistä validointi ohjaimissa @Valid-annotaatiolla.
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.
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
- Bean Validation: @NotNull, @Size, @Pattern
- Mukautetut rajoiteannotaatiot
- Poikkeusten keskitetty käsittely @ControllerAdvice-annotaatiolla
- RFC 7807:n ongelmatiedot ja yhdenmukaiset virhevastaustaukset