Java Academy · leksjon

Bean-validering: @NotNull, @Size, @Pattern

Annoter DTO-er med begrensninger fra Bean Validation, og utløs validering med @Valid i kontrollere.

Leksjon 1 av 413 trinn

Bean-validering: @NotNull, @Size, @Pattern er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva er Bean Validation?

Bean Validation (Jakarta Bean Validation 3.0) tilbyr deklarative constraint-annotasjoner for Java-bønner. Spring Boot konfigurerer automatisk en validator og utløser den via @Valid eller @Validated.

@NotNull, @NotEmpty, @NotBlank

@NotNull: verdien kan ikke være null. @NotEmpty: ikke null og ikke tom (strenger/samlinger). @NotBlank: ikke null, ikke tom og ikke bare mellomrom. Foretrekk @NotBlank for strenger.

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

@Size og @Length

@Size(min, max) begrenser størrelsen på strenger, samlinger, map-er og arrayer. @Length (Hibernate) fungerer bare på strenger. Foretrekk @Size for portabilitet.

@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

Numeriske begrensninger: @Min/@Max for eksakte grenser, @Positive/@PositiveOrZero for fortegnsbegrensninger, og @DecimalMin/@DecimalMax for BigDecimal.

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

@Pattern for validering med regulære uttrykk

@Pattern(regexp) validerer strenger mot et regulært uttrykk. Dette er nyttig for telefonnumre, postnumre og egendefinerte formater.

@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 og @URL

@Email validerer e-postformat (grunnleggende RFC 5321). @URL (Hibernate) validerer URL-format. Kombiner dem alltid med @NotBlank, siden de tillater null.

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

@Past, @Future, @PastOrPresent

Temporale begrensninger validerer dato- og klokkeslettverdier. De fungerer med LocalDate, LocalDateTime, Instant og flere.

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

Utløse validering med @Valid

Legg til @Valid på en metodeparameter i en controller. Spring validerer objektet og kaster MethodArgumentNotValidException ved feil, noe som returnerer en 400 Bad Request.

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

Kaskadert validering med @Valid på felt

For å validere nestede objekter merker De feltet med @Valid i tillegg til begrensningene på klassenivå.

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

Valideringsgrupper

Bruk grupper for å anvende ulike begrensninger i ulike kontekster (for eksempel Create og Update). Annoter med gruppegrensesnittet, og utløs valideringen med @Validated(CreateGroup.class).

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) { ... }

Lese valideringsfeil

Fang opp MethodArgumentNotValidException i en @ControllerAdvice for å hente ut feltfeil og bygge strukturerte feilresponser.

@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);
}

Hurtigsjekk

Hvilken annotasjon validerer at en String er både ikke-null og ikke blank (ikke bare mellomrom)?

Oppsummering

Annoter DTO-er med Bean Validation-begrensninger. Legg til @Valid i controllere for å utløse validering. Bruk @NotBlank for strenger, @Size for lengder, @Pattern for regulære uttrykk og @Past/@Future for datoer. Håndter feil i @ControllerAdvice.

Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Bean-validering: @NotNull, @Size, @Pattern» gratis?

Ja – hele teksten i «Bean-validering: @NotNull, @Size, @Pattern» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Bean-validering: @NotNull, @Size, @Pattern»?

Annoter DTO-er med begrensninger fra Bean Validation, og utløs validering med @Valid i kontrollere. Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Bean-validering: @NotNull, @Size, @Pattern»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Bean-validering: @NotNull, @Size, @Pattern
  2. Egendefinerte constraint-annotasjoner
  3. Global unntakshåndtering med @ControllerAdvice
  4. RFC 7807 Problem Details og konsistente feilsvar
← Tilbake til Java Academy