Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Spring boot bean validation não esta funcionando [RESOLVIDO]

Pessoal, estava testando a ultima versão do spring boot (3.2.2) e ao utilizar a dependencia de bean validation não esta executando as validações. Meu build.gradle:

plugins {
    java
    id("org.springframework.boot") version "3.2.2"
    id("io.spring.dependency-management") version "1.1.4"
    id("org.jetbrains.kotlin.plugin.spring") version "1.9.22"
    kotlin("plugin.noarg") version "1.9.22"
    kotlin("plugin.jpa") version "1.9.22"
    kotlin("jvm")
}

group = "com.study.alura.challenge"
version = "0.0.1-SNAPSHOT"

java {
}

repositories {
    mavenCentral()
}

dependencies {
    // Spring
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-log4j2")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    implementation("org.springframework.boot:spring-boot-starter-validation:3.2.2")

    //Database
    implementation("org.flywaydb:flyway-core")
    runtimeOnly("org.postgresql:postgresql")

    //AWS
    implementation("com.amazonaws:aws-java-sdk:1.12.644")

    //Kotlin
    runtimeOnly("org.jetbrains.kotlin:kotlin-reflect:1.9.22")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.16.1")
    implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1")

    //Testing
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    implementation(kotlin("stdlib-jdk8"))
}

dependencyManagement {
    imports {
        mavenBom("org.springframework.cloud:spring-cloud-dependencies:2023.0.0")
    }
}

configurations {
    all {
        exclude("org.springframework.boot", module = "spring-boot-starter-logging")
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}
kotlin {
    jvmToolchain(21)
}
1 resposta
solução!

O erro estava no DTO, para triggar a validação no kotlin precisa incluir o @field antes da anotação do bean validation, como no exemplo abaixo. Isso "fala" para o spring aplicar a anotação para a propriedade do objeto e não nos getters/setters.

data class CreateUserRequestDTO(
    @field:NotNull(message = "The name field is mandatory")
    @field:Size(min = 3, max = 100, message = "The name field must bet between 3 and 100 chars")
    val name: String,
    @field:NotNull(message = "The email field is mandatory")
    @field:Email
    val email: String,
    @field:NotNull(message = "The password field is mandatory")
    @field:Size(min = 6, max = 12, message = "The password field must bet between 6 and 12 chars")
    val password: String
) : Serializable