Overview
Ironclad uses thevalidator crate for declarative input validation. Validation is applied automatically using the ValidatedJson extractor, ensuring invalid data never reaches your business logic.
Validation Architecture
Ironclad implements a multi-layer validation strategy:ValidatedJson Extractor
TheValidatedJson extractor automatically validates DTOs before they reach your handlers:
validated_json.rs:8-51.
Using ValidatedJson
Basic Usage
Simply useValidatedJson<T> instead of web::Json<T>:
auth_controller.rs:14-20 for a real example.
What ValidatedJson Does
- Deserializes JSON - Converts request body to Rust struct
- Validates structure - Ensures all required fields are present
- Validates format - Checks email format, string lengths, etc.
- Returns errors - Automatically returns 400 Bad Request with error details
Validation Decorators
Thevalidator crate provides many built-in validation decorators:
Email Validation
auth_dto.rs:8.
Length Validation
auth_dto.rs:11-15.
Range Validation
URL Validation
Custom Validation Function
Multiple Validations
Combine multiple validators on a single field:Custom Validators
Ironclad includes custom validators for common security patterns:Strong Password Validation
Requires uppercase, lowercase, digit, and special character:validator/mod.rs:4-15.
Password must contain:
- At least one uppercase letter (A-Z)
- At least one lowercase letter (a-z)
- At least one digit (0-9)
- At least one special character (!@#$%^&*, etc.)
Username Validation
Allows only alphanumeric characters, underscores, and hyphens:validator/mod.rs:18-28.
Using Custom Validators
Apply custom validators in your service layer:auth_service.rs:28-30.
Validation Examples
Authentication DTOs
Complete validation for user registration:auth_dto.rs:6-16.
Login DTO
auth_dto.rs:19-26.
Update Profile DTO
Optional fields with validation:auth_dto.rs:29-39.
Test Item DTO
Validation for test entities:test_item_dto.rs:5-12.
Error Response Format
Single Field Error
When a single field fails validation:Multiple Field Errors
When multiple fields fail validation:Example Request/Response
Business Logic Validation
Some validation requires database access and should be performed in the service layer:Unique Email Check
auth_service.rs:33-35.
Account Active Check
auth_service.rs:71-73.
Domain Validation (Value Objects)
Value Objects provide type-safe domain validation:Email Value Object
Username Value Object
Using Value Objects
auth_service.rs:38-39.
Available Validators
Thevalidator crate provides many built-in validators:
- String
- Number
- Collection
- Object
email- Email formaturl- URL formatlength- Min/max lengthregex- Custom regex patterncontains- Contains substringcustom- Custom function
Best Practices
Layer Your Validations
Provide Clear Error Messages
Validate Optional Fields
Optional fields are validated only when present:Use ValidatedJson Consistently
Always useValidatedJson for input DTOs:
Testing Validation
Test validation rules in unit tests:Related Documentation
Authentication
See validation in action in the authentication flow
validator Crate
Full documentation for the validator crate