Spring boot starter that enables bean validator in controller beans.
import org.springframework.validation.annotation.Validated
import com.mwguy.validation.EnableControllerValidation
@RestController
class SimpleController {
@PostMapping
suspend fun doPostJob(@RequestBody @Validated payload: PostPayLoad): String {
return "Hello, ${payload.message}"
}
class PostPayLoad(val message: String? = null)
}
@Component
class SimpleValidator : Validator {
override fun supports(clazz: Class<*>): Boolean {
return clazz == SimpleController.PostPayLoad::class.java
}
override fun validate(target: Any, errors: Errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "message", "message.empty")
}
}
@SpringBootApplication
@EnableControllerValidation
class SpringCoreValidationApplication
fun main(args: Array<String>) {
runApplication<SpringCoreValidationApplication>(*args)
}
First, add jitpack maven repository:
repositories {
maven("https://jitpack.io")
}
Second, add dependency:
dependencies {
implementation("com.github.MWGuy:spring-boot-starter-controller-validation:1.0")
}
First of all you need to enable controller validation with @EnableControllerValidation
annotation.
Then you need to create controller advice which handles com.mwguy.validation.exception.ValidationFailedException
.
Example controller advice implementation:
import com.mwguy.validation.exception.ValidationFailedException
@ControllerAdvice
class ValidationControllerAdvice {
@ExceptionHandler(ValidationFailedException::class)
fun handleValidationException(exception: ValidationFailedException): ResponseEntity<List<ValidationErrorDetail>> {
return ResponseEntity.badRequest().body(exception.errors.map {
ValidationErrorDetail(it.objectName, it.defaultMessage ?: it.code)
})
}
data class ValidationErrorDetail(val path: String, val message: String?)
}