Bean-validering med @Valid
Validera request body med annoteringar.
Bean-validering med @Valid är en gratis lektion i Spring Boot 4-mikrotjänster och REST API:er 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 Spring Boot 4-mikrotjänster och REST API:er, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Spring Boot 4-mikrotjänster och REST API:er innehåller totalt 4 lektioner.
Översikt över Bean Validation
Bean Validation (JSR-380, Jakarta Validation) låter dig deklarera begränsningar med annoteringar på DTO-fält och sedan validera objekt mot dem. Spring Boot integrerar detta så att inkommande request bodies kontrolleras automatiskt.
Lägg till beroendet
Validerings-API:t och en implementation (Hibernate Validator) följer med via validation-starter. När du lägger till den aktiveras annoteringsbaserad validering i controllers.
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>Begränsningar på en DTO
Annotera fält med begränsningar. Varje begränsning beskriver en regel som värdet måste uppfylla, samt ett valfritt meddelande som visas när regeln bryts.
public class CreateUserRequest {
@NotBlank
private String name;
@Email @NotNull
private String email;
@Size(min = 8, max = 64)
private String password;
@Min(18)
private int age;
// getters/setters
}Vanliga begränsningar
Standardannoteringarna täcker de flesta behov:
@NotNull— värdet får inte vara null@NotBlank— strängen måste innehålla annat än blanksteg@NotEmpty— samlingen eller strängen får inte vara tom@Size,@Min,@Max,@Email,@Pattern
Utlös validering med @Valid
Annotera parametern för request body med @Valid i en controller. Spring validerar den innan metodkroppen körs och avbryter anropet med ett fel om valideringen misslyckas.
@PostMapping("/users")
public ResponseEntity<Void> create(@Valid @RequestBody CreateUserRequest req) {
userService.create(req);
return ResponseEntity.status(HttpStatus.CREATED).build();
}Vad händer vid fel
Om valideringen misslyckas kastar Spring MethodArgumentNotValidException för en @RequestBody. Som standard leder detta till 400 Bad Request, så ogiltig indata når aldrig servicelagret.
Anpassade meddelanden
Åsidosätt standardmeddelandet för varje begränsning med attributet message, eller lägg meddelanden i ett resursbunt för internationalisering.
@Size(min = 8, message = "Password must be at least 8 characters")
private String password;Validera sökvägs- och frågeparametrar
Om du vill validera enskilda metodparametrar (inte en DTO) placerar du begränsningarna direkt på dem och lägger till @Validated på klassnivå så att validering på metodnivå aktiveras.
@Validated
@RestController
public class ProductController {
@GetMapping("/products")
public List<Product> list(@RequestParam @Min(1) int page) {
return service.page(page);
}
}Kapslad validering
Validering går inte automatiskt ner i kapslade objekt. Märk det kapslade fältet med @Valid så att även dess begränsningar kontrolleras.
public class OrderRequest {
@NotNull
@Valid
private AddressDto shippingAddress;
// ...
}Validera samlingar
Om du vill validera varje element i en samling placerar du @Valid på samlingsfältet. Därefter utvärderas begränsningarna för varje objekt.
public class CartRequest {
@NotEmpty
private List<@Valid LineItem> items;
// ...
}Valideringsgrupper
Valideringsgrupper låter samma DTO tillämpa olika regler i olika sammanhang (till exempel vid skapande jämfört med uppdatering). Annotera begränsningarna med ett gruppgränssnitt och validera mot den gruppen.
public interface OnCreate {}
public class UserDto {
@Null(groups = OnCreate.class)
private Long id; // must be null when creating
}Snabb kontroll
Testa din förståelse av @Valid.
Sammanfattning
Bean Validation skyddar dina indata.
- Lägg till
spring-boot-starter-validation - Deklarera begränsningar som
@NotBlank,@Sizeoch@Emailpå DTO:er - Utlös validering med
@Validpå request bodies; fel ger svaret 400 - Använd
@Validatedför validering på parameternivå - Kapslade objekt och samlingar behöver ett eget
@Valid
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
- 24
- Lektioner
- 93
Vanliga frågor
Är lektionen ”Bean-validering med @Valid” gratis?
Ja – hela texten till ”Bean-validering med @Valid” 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 Spring Boot 4-mikrotjänster och REST API:er, kan Ni uppgradera till CoddyKit PRO. Kursen i Spring Boot 4-mikrotjänster och REST API:er innehåller totalt 4 lektioner.
Vad lär jag mig i ”Bean-validering med @Valid”?
Validera request body med annoteringar. Ni övar på Spring Boot 4-mikrotjänster och REST API:er 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 Spring Boot 4-mikrotjänster och REST API:er?
Du behöver inga förkunskaper. Utbildningen i Spring Boot 4-mikrotjänster och REST API:er 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 med @Valid”?
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 Spring Boot 4-mikrotjänster och REST API:er-lektionen?
Ja. Varje Spring Boot 4-mikrotjänster och REST API:er-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
- Bean-validering med @Valid
- Anpassade validatorer
- @ControllerAdvice och @ExceptionHandler
- Problemdetaljer (RFC 7807)