Java Academy · Lektion

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

Annotera DTO:er med begränsningar från Bean Validation och utlös validering med @Valid i styrenheter.

Lektion 1 av 413 steg

Bean-validering: @NotNull, @Size, @Pattern är en gratis lektion i Java Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Java Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Java Academy innehåller totalt 4 lektioner.

Vad är Bean Validation?

Bean Validation (Jakarta Bean Validation 3.0) tillhandahåller deklarativa constraint-annoteringar för Java-bönor. Spring Boot konfigurerar automatiskt en validator och aktiverar den via @Valid eller @Validated.

@NotNull, @NotEmpty, @NotBlank

@NotNull: värdet får inte vara null. @NotEmpty: får inte vara null eller tomt (strängar/samlingar). @NotBlank: får inte vara null, tomt eller endast innehålla blanksteg. Föredra @NotBlank för strängar.

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

@Size och @Length

@Size(min, max) begränsar storleken på strängar, samlingar, mappar och arrayer. @Length (Hibernate) fungerar endast på strängar. Föredra @Size för 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

Numeriska begränsningar: @Min/@Max för exakta gränser, @Positive/@PositiveOrZero för teckenbegränsningar och @DecimalMin/@DecimalMax för BigDecimal.

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

@Pattern för regexvalidering

@Pattern(regexp) validerar strängar mot ett reguljärt uttryck. Det är användbart för telefonnummer, postnummer och anpassade format.

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

@Email validerar e-postformat (grundläggande RFC 5321). @URL (Hibernate) validerar URL-format. Kombinera alltid med @NotBlank eftersom de tillåter null.

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

@Past, @Future, @PastOrPresent

Temporala begränsningar validerar datum- och tidsvärden. De fungerar med LocalDate, LocalDateTime, Instant med flera.

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

Utlös validering med @Valid

Lägg till @Valid på en parameter i en controller-metod. Spring validerar objektet och kastar MethodArgumentNotValidException vid fel, vilket returnerar 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));
}

Kaskadvalidering med @Valid på fält

För att validera nästlade objekt ska ni annotera fältet med @Valid utöver begränsningarna på klassnivå.

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

Valideringsgrupper

Använd grupper för att tillämpa olika begränsningar i olika sammanhang (till exempel vid skapande respektive uppdatering). Annotera med gruppgränssnittet och aktivera 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) { ... }

Läsa valideringsfel

Fånga MethodArgumentNotValidException i en @ControllerAdvice för att extrahera fältfel och bygga strukturerade felsvar.

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

Snabb kontroll

Vilken annotering validerar att en String inte är null OCH inte är blank (inte bara består av blanksteg)?

Sammanfattning

Annotera DTO:er med Bean Validation-begränsningar. Lägg till @Valid i controllers för att utlösa validering. Använd @NotBlank för strängar, @Size för längder, @Pattern för regex och @Past/@Future för datum. Hantera fel i @ControllerAdvice.

Gratis att börja

Lär dig Java med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
104
Lektioner
374

Vanliga frågor

Är lektionen ”Bean-validering: @NotNull, @Size, @Pattern” gratis?

Ja – hela texten till ”Bean-validering: @NotNull, @Size, @Pattern” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Java Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Java Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Bean-validering: @NotNull, @Size, @Pattern”?

Annotera DTO:er med begränsningar från Bean Validation och utlös validering med @Valid i styrenheter. Ni övar på Java Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Java Academy?

Du behöver inga förkunskaper. Utbildningen i Java Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Bean-validering: @NotNull, @Size, @Pattern”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Java Academy-lektionen?

Ja. Varje Java Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Bean-validering: @NotNull, @Size, @Pattern
  2. Anpassade constraint-annotationer
  3. Global undantagshantering med @ControllerAdvice
  4. RFC 7807 Problem Details och enhetliga felsvar
← Tillbaka till Java Academy