A comprehensive Kotlin library for Spring Boot that eliminates boilerplate code and accelerates API development with automatic CRUD operations, API versioning, bulk operations, and more.
- π Automatic CRUD Endpoints - Get complete REST APIs with a single class
- π API Versioning - 4 strategies: URI, Header, Parameter, Accept-Header
- ποΈ Soft Delete - Mark records as deleted without losing data
- β‘ Bulk Operations - Create, update, delete multiple records at once
- π OpenAPI Documentation - Automatic Swagger/OpenAPI 3.0 generation
- π Policy-Based Authorization - Flexible, reusable authorization rules
- π Pagination & Sorting - Built-in support for large datasets
- π― Lifecycle Hooks - Customize behavior at every step
- π§ Highly Configurable - Fine-tune every aspect via properties
dependencies {
implementation("io.github.robertomike:super-controller:$version")
}<dependency>
<groupId>io.github.robertomike</groupId>
<artifactId>super-controller</artifactId>
<version>${version}</version>
</dependency>@Entity
data class User(
@Id @GeneratedValue
val id: Long? = null,
val name: String,
val email: String
)data class StoreUserRequest(
@NotBlank val name: String,
@Email val email: String
)
data class UpdateUserRequest(
val name: String?,
val email: String?
)@Service
class UserService(
repository: UserRepository
) : SuperService<User, Long>(repository)@RestController
class UserController(
userService: UserService,
override val mapper: UserResponseMapper
) : SuperController<User, Long, StoreUserRequest, UpdateUserRequest>(userService)You now have a complete REST API:
GET /api/users # List all users (paginated)
GET /api/users/{id} # Get user by ID
POST /api/users # Create user
PUT /api/users/{id} # Update user
DELETE /api/users/{id} # Delete user- Complete Documentation - Comprehensive guide to all features
- API Versioning Guide - Detailed versioning documentation
- OpenAPI Documentation - OpenAPI/Swagger integration
Support multiple API versions simultaneously:
@ApiVersion("v1")
@RestController
class UserControllerV1 : SuperController<...>()
@ApiVersion("v2")
@RestController
class UserControllerV2 : SuperController<...>()4 Strategies:
- URI:
/api/V1/users,/api/V2/users - Header:
X-API-Version: V1 - Parameter:
/api/users?version=V1 - Accept-Header:
Accept: application/vnd.api.V1+json
Keep deleted records for audit trails:
@RestController
class UserController : SuperController<...>,
SoftDeletableMarker<User, Long> // Enable soft deleteNew endpoints:
DELETE /users/{id}/soft-delete- Soft deletePUT /users/{id}/restore- RestoreDELETE /users/{id}/force- Permanent delete
Handle multiple records efficiently:
@RestController
class UserController : SuperController<...>,
BulkOperationsMarker<...> // Enable bulk operationsNew endpoints:
POST /users/bulk- Create multiplePUT /users/bulk- Update multipleDELETE /users/bulk- Delete multiple
Automatic Swagger UI generation:
super-controller.openapi.enabled=true
super-controller.openapi.title=My APIAccess at: http://localhost:8080/swagger-ui.html
# Versioning
super-controller.versioning.enabled=true
super-controller.versioning.strategy=URI
super-controller.versioning.default-version=v1
# OpenAPI
super-controller.openapi.enabled=true
super-controller.openapi.title=My API
# General
super-controller.prefix-url=/apiSee Configuration Guide for all options.
@ApiVersion("v1")
@RestController
class UserController(
userService: UserService,
override val mapper: UserResponseMapper
) : SuperController<User, Long, StoreUserRequest, UpdateUserRequest>(userService),
BulkOperationsMarker<User, Long, StoreUserRequest, UpdateUserRequest>,
SoftDeletableMarker<User, Long> {
init {
needAuthorization = true
policy = UserPolicy::class.java
}
override fun beforeCreate(request: StoreUserRequest): StoreUserRequest {
return request.copy(email = request.email.lowercase())
}
override fun afterCreate(entity: User, request: StoreUserRequest): User {
emailService.sendWelcomeEmail(entity)
return entity
}
@GetMapping("/users/active")
fun getActiveUsers(pageable: Pageable): Page<User> {
return service.findActiveUsers(pageable)
}
}Automatic endpoints:
# CRUD
GET /api/V1/users
POST /api/V1/users
GET /api/V1/users/{id}
PUT /api/V1/users/{id}
DELETE /api/V1/users/{id}
# Bulk
POST /api/V1/users/bulk
PUT /api/V1/users/bulk
DELETE /api/V1/users/bulk
# Soft Delete
DELETE /api/V1/users/{id}/soft-delete
PUT /api/V1/users/{id}/restore
DELETE /api/V1/users/{id}/force
# Custom
GET /api/V1/users/active
More examples in DOCUMENTATION.md
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the Apache License 2.0 - see the LICENSE.txt file for details.
- GitHub: https://github.com/RobertoMike/Super-Controller
- Issues: https://github.com/RobertoMike/Super-Controller/issues
Made with β€οΈ by RobertoMike