diff --git a/spring-boot/validation/.gitignore b/spring-boot/validation/.gitignore index 9243c63d7..8899af5f4 100644 --- a/spring-boot/validation/.gitignore +++ b/spring-boot/validation/.gitignore @@ -10,6 +10,7 @@ .settings .springBeans .sts4-cache +bin/ ### IntelliJ IDEA ### .idea @@ -23,4 +24,4 @@ /nbbuild/ /dist/ /nbdist/ -/.nb-gradle/ \ No newline at end of file +/.nb-gradle/ diff --git a/spring-boot/validation/build.gradle b/spring-boot/validation/build.gradle index ed9da0c53..1568990d8 100644 --- a/spring-boot/validation/build.gradle +++ b/spring-boot/validation/build.gradle @@ -1,42 +1,34 @@ -buildscript { - ext { - springBootVersion = '2.3.1.RELEASE' - } - repositories { - mavenCentral() - } - dependencies { - classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") - } +plugins { + id 'java' + id "io.freefair.lombok" version "8.6" + id 'org.springframework.boot' version '3.3.0' + id 'io.spring.dependency-management' version '1.1.5' } -apply plugin: 'java' -apply plugin: 'eclipse' -apply plugin: 'org.springframework.boot' -apply plugin: 'io.spring.dependency-management' - group = 'io.reflectoring' -version = '0.0.1-SNAPSHOT' -sourceCompatibility = 11 +version = '0.0.1' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} repositories { mavenCentral() } dependencies { - implementation('org.springframework.boot:spring-boot-starter-data-jpa') - implementation('org.springframework.boot:spring-boot-starter-validation') implementation('org.springframework.boot:spring-boot-starter-web') + implementation('org.springframework.boot:spring-boot-starter-validation') + implementation('org.springframework.boot:spring-boot-starter-data-jpa') + implementation('org.springframework.boot:spring-boot-configuration-processor') runtimeOnly('com.h2database:h2') + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') - testImplementation('org.junit.jupiter:junit-jupiter-engine:5.0.1') - - // these dependencies are needed when running with Java 11, since they - // are no longer part of the JDK - implementation('javax.xml.bind:jaxb-api:2.3.1') - implementation('org.javassist:javassist:3.23.1-GA') } -test{ +tasks.named('test') { useJUnitPlatform() } \ No newline at end of file diff --git a/spring-boot/validation/deps.txt b/spring-boot/validation/deps.txt index 7a9158da4..db05dc342 100644 --- a/spring-boot/validation/deps.txt +++ b/spring-boot/validation/deps.txt @@ -1,735 +1,155 @@ +Starting a Gradle Daemon, 3 incompatible Daemons could not be reused, use --status for details > Task :dependencies ------------------------------------------------------------ -Root project +Root project 'validation' ------------------------------------------------------------ -annotationProcessor - Annotation processors and their dependencies for source set 'main'. -No dependencies - -apiElements - API elements for main. (n) -No dependencies - -archives - Configuration for archive artifacts. -No dependencies - -bootArchives - Configuration for Spring Boot archive artifacts. -No dependencies - -compile - Dependencies for source set 'main' (deprecated, use 'implementation' instead). -No dependencies - -compileClasspath - Compile classpath for source set 'main'. -+--- org.springframework.boot:spring-boot-starter-data-jpa -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot:2.0.5.RELEASE -| | | +--- org.springframework:spring-core:5.0.9.RELEASE -| | | | \--- org.springframework:spring-jcl:5.0.9.RELEASE -| | | \--- org.springframework:spring-context:5.0.9.RELEASE -| | | +--- org.springframework:spring-aop:5.0.9.RELEASE -| | | | +--- org.springframework:spring-beans:5.0.9.RELEASE -| | | | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-expression:5.0.9.RELEASE -| | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | +--- org.springframework.boot:spring-boot-autoconfigure:2.0.5.RELEASE -| | | \--- org.springframework.boot:spring-boot:2.0.5.RELEASE (*) -| | +--- org.springframework.boot:spring-boot-starter-logging:2.0.5.RELEASE -| | | +--- ch.qos.logback:logback-classic:1.2.3 -| | | | +--- ch.qos.logback:logback-core:1.2.3 -| | | | \--- org.slf4j:slf4j-api:1.7.25 -| | | +--- org.apache.logging.log4j:log4j-to-slf4j:2.10.0 -| | | | +--- org.slf4j:slf4j-api:1.7.25 -| | | | \--- org.apache.logging.log4j:log4j-api:2.10.0 -| | | \--- org.slf4j:jul-to-slf4j:1.7.25 -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | +--- javax.annotation:javax.annotation-api:1.3.2 -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.yaml:snakeyaml:1.19 -| +--- org.springframework.boot:spring-boot-starter-aop:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| | \--- org.aspectj:aspectjweaver:1.8.13 -| +--- org.springframework.boot:spring-boot-starter-jdbc:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- com.zaxxer:HikariCP:2.7.9 -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | \--- org.springframework:spring-jdbc:5.0.9.RELEASE -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.springframework:spring-tx:5.0.9.RELEASE -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- javax.transaction:javax.transaction-api:1.2 -| +--- org.hibernate:hibernate-core:5.2.17.Final -| | +--- org.jboss.logging:jboss-logging:3.3.1.Final -> 3.3.2.Final -| | +--- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final -> 1.0.2.Final -| | +--- org.javassist:javassist:3.22.0-GA -> 3.23.1-GA -| | +--- antlr:antlr:2.7.7 -| | +--- org.jboss:jandex:2.0.3.Final -| | +--- com.fasterxml:classmate:1.3.0 -> 1.3.4 -| | +--- dom4j:dom4j:1.6.1 -| | \--- org.hibernate.common:hibernate-commons-annotations:5.0.1.Final -| | \--- org.jboss.logging:jboss-logging:3.3.0.Final -> 3.3.2.Final -| +--- org.springframework.data:spring-data-jpa:2.0.10.RELEASE -| | +--- org.springframework.data:spring-data-commons:2.0.10.RELEASE -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | +--- org.springframework:spring-orm:5.0.9.RELEASE -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-jdbc:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-tx:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-context:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-tx:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.slf4j:slf4j-api:1.7.25 -| \--- org.springframework:spring-aspects:5.0.9.RELEASE -| \--- org.aspectj:aspectjweaver:1.8.13 -+--- org.springframework.boot:spring-boot-starter-validation -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.34 -| \--- org.hibernate.validator:hibernate-validator:6.0.12.Final -| +--- javax.validation:validation-api:2.0.1.Final -| +--- org.jboss.logging:jboss-logging:3.3.2.Final -| \--- com.fasterxml:classmate:1.3.4 -+--- org.springframework.boot:spring-boot-starter-web -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.springframework.boot:spring-boot-starter-json:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- org.springframework:spring-web:5.0.9.RELEASE -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | +--- com.fasterxml.jackson.core:jackson-databind:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -| | | \--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -| | | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| | \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.6 -| | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| +--- org.springframework.boot:spring-boot-starter-tomcat:2.0.5.RELEASE -| | +--- javax.annotation:javax.annotation-api:1.3.2 -| | +--- org.apache.tomcat.embed:tomcat-embed-core:8.5.34 -| | +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.34 -| | \--- org.apache.tomcat.embed:tomcat-embed-websocket:8.5.34 -| | \--- org.apache.tomcat.embed:tomcat-embed-core:8.5.34 -| +--- org.hibernate.validator:hibernate-validator:6.0.12.Final (*) -| +--- org.springframework:spring-web:5.0.9.RELEASE (*) -| \--- org.springframework:spring-webmvc:5.0.9.RELEASE -| +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| +--- org.springframework:spring-context:5.0.9.RELEASE (*) -| +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- org.springframework:spring-expression:5.0.9.RELEASE (*) -| \--- org.springframework:spring-web:5.0.9.RELEASE (*) -+--- javax.xml.bind:jaxb-api:2.3.1 -| \--- javax.activation:javax.activation-api:1.2.0 -\--- org.javassist:javassist:3.23.1-GA - -compileOnly - Compile only dependencies for source set 'main'. -No dependencies - -default - Configuration for default artifacts. -+--- org.springframework.boot:spring-boot-starter-data-jpa -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot:2.0.5.RELEASE -| | | +--- org.springframework:spring-core:5.0.9.RELEASE -| | | | \--- org.springframework:spring-jcl:5.0.9.RELEASE -| | | \--- org.springframework:spring-context:5.0.9.RELEASE -| | | +--- org.springframework:spring-aop:5.0.9.RELEASE -| | | | +--- org.springframework:spring-beans:5.0.9.RELEASE -| | | | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-expression:5.0.9.RELEASE -| | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | +--- org.springframework.boot:spring-boot-autoconfigure:2.0.5.RELEASE -| | | \--- org.springframework.boot:spring-boot:2.0.5.RELEASE (*) -| | +--- org.springframework.boot:spring-boot-starter-logging:2.0.5.RELEASE -| | | +--- ch.qos.logback:logback-classic:1.2.3 -| | | | +--- ch.qos.logback:logback-core:1.2.3 -| | | | \--- org.slf4j:slf4j-api:1.7.25 -| | | +--- org.apache.logging.log4j:log4j-to-slf4j:2.10.0 -| | | | +--- org.slf4j:slf4j-api:1.7.25 -| | | | \--- org.apache.logging.log4j:log4j-api:2.10.0 -| | | \--- org.slf4j:jul-to-slf4j:1.7.25 -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | +--- javax.annotation:javax.annotation-api:1.3.2 -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.yaml:snakeyaml:1.19 -| +--- org.springframework.boot:spring-boot-starter-aop:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| | \--- org.aspectj:aspectjweaver:1.8.13 -| +--- org.springframework.boot:spring-boot-starter-jdbc:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- com.zaxxer:HikariCP:2.7.9 -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | \--- org.springframework:spring-jdbc:5.0.9.RELEASE -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.springframework:spring-tx:5.0.9.RELEASE -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- javax.transaction:javax.transaction-api:1.2 -| +--- org.hibernate:hibernate-core:5.2.17.Final -| | +--- org.jboss.logging:jboss-logging:3.3.1.Final -> 3.3.2.Final -| | +--- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final -> 1.0.2.Final -| | +--- org.javassist:javassist:3.22.0-GA -> 3.23.1-GA -| | +--- antlr:antlr:2.7.7 -| | +--- org.jboss:jandex:2.0.3.Final -| | +--- com.fasterxml:classmate:1.3.0 -> 1.3.4 -| | +--- dom4j:dom4j:1.6.1 -| | \--- org.hibernate.common:hibernate-commons-annotations:5.0.1.Final -| | \--- org.jboss.logging:jboss-logging:3.3.0.Final -> 3.3.2.Final -| +--- org.springframework.data:spring-data-jpa:2.0.10.RELEASE -| | +--- org.springframework.data:spring-data-commons:2.0.10.RELEASE -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | +--- org.springframework:spring-orm:5.0.9.RELEASE -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-jdbc:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-tx:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-context:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-tx:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.slf4j:slf4j-api:1.7.25 -| \--- org.springframework:spring-aspects:5.0.9.RELEASE -| \--- org.aspectj:aspectjweaver:1.8.13 -+--- org.springframework.boot:spring-boot-starter-validation -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.34 -| \--- org.hibernate.validator:hibernate-validator:6.0.12.Final -| +--- javax.validation:validation-api:2.0.1.Final -| +--- org.jboss.logging:jboss-logging:3.3.2.Final -| \--- com.fasterxml:classmate:1.3.4 -+--- org.springframework.boot:spring-boot-starter-web -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.springframework.boot:spring-boot-starter-json:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- org.springframework:spring-web:5.0.9.RELEASE -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | +--- com.fasterxml.jackson.core:jackson-databind:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -| | | \--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -| | | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| | \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.6 -| | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| +--- org.springframework.boot:spring-boot-starter-tomcat:2.0.5.RELEASE -| | +--- javax.annotation:javax.annotation-api:1.3.2 -| | +--- org.apache.tomcat.embed:tomcat-embed-core:8.5.34 -| | +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.34 -| | \--- org.apache.tomcat.embed:tomcat-embed-websocket:8.5.34 -| | \--- org.apache.tomcat.embed:tomcat-embed-core:8.5.34 -| +--- org.hibernate.validator:hibernate-validator:6.0.12.Final (*) -| +--- org.springframework:spring-web:5.0.9.RELEASE (*) -| \--- org.springframework:spring-webmvc:5.0.9.RELEASE -| +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| +--- org.springframework:spring-context:5.0.9.RELEASE (*) -| +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- org.springframework:spring-expression:5.0.9.RELEASE (*) -| \--- org.springframework:spring-web:5.0.9.RELEASE (*) -+--- javax.xml.bind:jaxb-api:2.3.1 -| \--- javax.activation:javax.activation-api:1.2.0 -+--- org.javassist:javassist:3.23.1-GA -\--- com.h2database:h2 -> 1.4.197 - -implementation - Implementation only dependencies for source set 'main'. (n) -+--- org.springframework.boot:spring-boot-starter-data-jpa (n) -+--- org.springframework.boot:spring-boot-starter-validation (n) -+--- org.springframework.boot:spring-boot-starter-web (n) -+--- javax.xml.bind:jaxb-api:2.3.1 (n) -\--- org.javassist:javassist:3.23.1-GA (n) - -runtime - Runtime dependencies for source set 'main' (deprecated, use 'runtimeOnly' instead). -No dependencies - runtimeClasspath - Runtime classpath of source set 'main'. -+--- org.springframework.boot:spring-boot-starter-data-jpa -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot:2.0.5.RELEASE -| | | +--- org.springframework:spring-core:5.0.9.RELEASE -| | | | \--- org.springframework:spring-jcl:5.0.9.RELEASE -| | | \--- org.springframework:spring-context:5.0.9.RELEASE -| | | +--- org.springframework:spring-aop:5.0.9.RELEASE -| | | | +--- org.springframework:spring-beans:5.0.9.RELEASE -| | | | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-expression:5.0.9.RELEASE -| | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | +--- org.springframework.boot:spring-boot-autoconfigure:2.0.5.RELEASE -| | | \--- org.springframework.boot:spring-boot:2.0.5.RELEASE (*) -| | +--- org.springframework.boot:spring-boot-starter-logging:2.0.5.RELEASE -| | | +--- ch.qos.logback:logback-classic:1.2.3 -| | | | +--- ch.qos.logback:logback-core:1.2.3 -| | | | \--- org.slf4j:slf4j-api:1.7.25 -| | | +--- org.apache.logging.log4j:log4j-to-slf4j:2.10.0 -| | | | +--- org.slf4j:slf4j-api:1.7.25 -| | | | \--- org.apache.logging.log4j:log4j-api:2.10.0 -| | | \--- org.slf4j:jul-to-slf4j:1.7.25 -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | +--- javax.annotation:javax.annotation-api:1.3.2 -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.yaml:snakeyaml:1.19 -| +--- org.springframework.boot:spring-boot-starter-aop:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| | \--- org.aspectj:aspectjweaver:1.8.13 -| +--- org.springframework.boot:spring-boot-starter-jdbc:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- com.zaxxer:HikariCP:2.7.9 -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | \--- org.springframework:spring-jdbc:5.0.9.RELEASE -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.springframework:spring-tx:5.0.9.RELEASE -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- javax.transaction:javax.transaction-api:1.2 -| +--- org.hibernate:hibernate-core:5.2.17.Final -| | +--- org.jboss.logging:jboss-logging:3.3.1.Final -> 3.3.2.Final -| | +--- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final -> 1.0.2.Final -| | +--- org.javassist:javassist:3.22.0-GA -> 3.23.1-GA -| | +--- antlr:antlr:2.7.7 -| | +--- org.jboss:jandex:2.0.3.Final -| | +--- com.fasterxml:classmate:1.3.0 -> 1.3.4 -| | +--- dom4j:dom4j:1.6.1 -| | \--- org.hibernate.common:hibernate-commons-annotations:5.0.1.Final -| | \--- org.jboss.logging:jboss-logging:3.3.0.Final -> 3.3.2.Final -| +--- org.springframework.data:spring-data-jpa:2.0.10.RELEASE -| | +--- org.springframework.data:spring-data-commons:2.0.10.RELEASE -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | +--- org.springframework:spring-orm:5.0.9.RELEASE -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-jdbc:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-tx:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-context:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-tx:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.slf4j:slf4j-api:1.7.25 -| \--- org.springframework:spring-aspects:5.0.9.RELEASE -| \--- org.aspectj:aspectjweaver:1.8.13 -+--- org.springframework.boot:spring-boot-starter-validation -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.34 -| \--- org.hibernate.validator:hibernate-validator:6.0.12.Final -| +--- javax.validation:validation-api:2.0.1.Final -| +--- org.jboss.logging:jboss-logging:3.3.2.Final -| \--- com.fasterxml:classmate:1.3.4 -+--- org.springframework.boot:spring-boot-starter-web -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.springframework.boot:spring-boot-starter-json:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- org.springframework:spring-web:5.0.9.RELEASE -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | +--- com.fasterxml.jackson.core:jackson-databind:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -| | | \--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -| | | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| | \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.6 -| | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| +--- org.springframework.boot:spring-boot-starter-tomcat:2.0.5.RELEASE -| | +--- javax.annotation:javax.annotation-api:1.3.2 -| | +--- org.apache.tomcat.embed:tomcat-embed-core:8.5.34 -| | +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.34 -| | \--- org.apache.tomcat.embed:tomcat-embed-websocket:8.5.34 -| | \--- org.apache.tomcat.embed:tomcat-embed-core:8.5.34 -| +--- org.hibernate.validator:hibernate-validator:6.0.12.Final (*) -| +--- org.springframework:spring-web:5.0.9.RELEASE (*) -| \--- org.springframework:spring-webmvc:5.0.9.RELEASE -| +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| +--- org.springframework:spring-context:5.0.9.RELEASE (*) -| +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- org.springframework:spring-expression:5.0.9.RELEASE (*) -| \--- org.springframework:spring-web:5.0.9.RELEASE (*) -+--- javax.xml.bind:jaxb-api:2.3.1 -| \--- javax.activation:javax.activation-api:1.2.0 -+--- org.javassist:javassist:3.23.1-GA -\--- com.h2database:h2 -> 1.4.197 - -runtimeElements - Elements of runtime for main. (n) -No dependencies - -runtimeOnly - Runtime only dependencies for source set 'main'. (n) -\--- com.h2database:h2 (n) - -testAnnotationProcessor - Annotation processors and their dependencies for source set 'test'. -No dependencies - -testCompile - Dependencies for source set 'test' (deprecated, use 'testImplementation' instead). -No dependencies - -testCompileClasspath - Compile classpath for source set 'test'. -+--- org.springframework.boot:spring-boot-starter-data-jpa -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot:2.0.5.RELEASE -| | | +--- org.springframework:spring-core:5.0.9.RELEASE -| | | | \--- org.springframework:spring-jcl:5.0.9.RELEASE -| | | \--- org.springframework:spring-context:5.0.9.RELEASE -| | | +--- org.springframework:spring-aop:5.0.9.RELEASE -| | | | +--- org.springframework:spring-beans:5.0.9.RELEASE -| | | | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-expression:5.0.9.RELEASE -| | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | +--- org.springframework.boot:spring-boot-autoconfigure:2.0.5.RELEASE -| | | \--- org.springframework.boot:spring-boot:2.0.5.RELEASE (*) -| | +--- org.springframework.boot:spring-boot-starter-logging:2.0.5.RELEASE -| | | +--- ch.qos.logback:logback-classic:1.2.3 -| | | | +--- ch.qos.logback:logback-core:1.2.3 -| | | | \--- org.slf4j:slf4j-api:1.7.25 -| | | +--- org.apache.logging.log4j:log4j-to-slf4j:2.10.0 -| | | | +--- org.slf4j:slf4j-api:1.7.25 -| | | | \--- org.apache.logging.log4j:log4j-api:2.10.0 -| | | \--- org.slf4j:jul-to-slf4j:1.7.25 -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | +--- javax.annotation:javax.annotation-api:1.3.2 -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.yaml:snakeyaml:1.19 -| +--- org.springframework.boot:spring-boot-starter-aop:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| | \--- org.aspectj:aspectjweaver:1.8.13 -| +--- org.springframework.boot:spring-boot-starter-jdbc:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- com.zaxxer:HikariCP:2.7.9 -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | \--- org.springframework:spring-jdbc:5.0.9.RELEASE -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.springframework:spring-tx:5.0.9.RELEASE -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- javax.transaction:javax.transaction-api:1.2 -| +--- org.hibernate:hibernate-core:5.2.17.Final -| | +--- org.jboss.logging:jboss-logging:3.3.1.Final -> 3.3.2.Final -| | +--- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final -> 1.0.2.Final -| | +--- org.javassist:javassist:3.22.0-GA -> 3.23.1-GA -| | +--- antlr:antlr:2.7.7 -| | +--- org.jboss:jandex:2.0.3.Final -| | +--- com.fasterxml:classmate:1.3.0 -> 1.3.4 -| | +--- dom4j:dom4j:1.6.1 -| | \--- org.hibernate.common:hibernate-commons-annotations:5.0.1.Final -| | \--- org.jboss.logging:jboss-logging:3.3.0.Final -> 3.3.2.Final -| +--- org.springframework.data:spring-data-jpa:2.0.10.RELEASE -| | +--- org.springframework.data:spring-data-commons:2.0.10.RELEASE -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | +--- org.springframework:spring-orm:5.0.9.RELEASE -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-jdbc:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-tx:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-context:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-tx:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.slf4j:slf4j-api:1.7.25 -| \--- org.springframework:spring-aspects:5.0.9.RELEASE -| \--- org.aspectj:aspectjweaver:1.8.13 -+--- org.springframework.boot:spring-boot-starter-validation -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.34 -| \--- org.hibernate.validator:hibernate-validator:6.0.12.Final -| +--- javax.validation:validation-api:2.0.1.Final -| +--- org.jboss.logging:jboss-logging:3.3.2.Final -| \--- com.fasterxml:classmate:1.3.4 -+--- org.springframework.boot:spring-boot-starter-web -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.springframework.boot:spring-boot-starter-json:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- org.springframework:spring-web:5.0.9.RELEASE -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | +--- com.fasterxml.jackson.core:jackson-databind:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -| | | \--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -| | | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| | \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.6 -| | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| +--- org.springframework.boot:spring-boot-starter-tomcat:2.0.5.RELEASE -| | +--- javax.annotation:javax.annotation-api:1.3.2 -| | +--- org.apache.tomcat.embed:tomcat-embed-core:8.5.34 -| | +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.34 -| | \--- org.apache.tomcat.embed:tomcat-embed-websocket:8.5.34 -| | \--- org.apache.tomcat.embed:tomcat-embed-core:8.5.34 -| +--- org.hibernate.validator:hibernate-validator:6.0.12.Final (*) -| +--- org.springframework:spring-web:5.0.9.RELEASE (*) -| \--- org.springframework:spring-webmvc:5.0.9.RELEASE -| +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| +--- org.springframework:spring-context:5.0.9.RELEASE (*) -| +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- org.springframework:spring-expression:5.0.9.RELEASE (*) -| \--- org.springframework:spring-web:5.0.9.RELEASE (*) -+--- javax.xml.bind:jaxb-api:2.3.1 -| \--- javax.activation:javax.activation-api:1.2.0 -+--- org.javassist:javassist:3.23.1-GA -+--- org.springframework.boot:spring-boot-starter-test -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.springframework.boot:spring-boot-test:2.0.5.RELEASE -| | \--- org.springframework.boot:spring-boot:2.0.5.RELEASE (*) -| +--- org.springframework.boot:spring-boot-test-autoconfigure:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-test:2.0.5.RELEASE (*) -| | \--- org.springframework.boot:spring-boot-autoconfigure:2.0.5.RELEASE (*) -| +--- com.jayway.jsonpath:json-path:2.4.0 -| | +--- net.minidev:json-smart:2.3 -| | | \--- net.minidev:accessors-smart:1.2 -| | | \--- org.ow2.asm:asm:5.0.4 -| | \--- org.slf4j:slf4j-api:1.7.25 -| +--- junit:junit:4.12 -| | \--- org.hamcrest:hamcrest-core:1.3 -| +--- org.assertj:assertj-core:3.9.1 -| +--- org.mockito:mockito-core:2.15.0 -| | +--- net.bytebuddy:byte-buddy:1.7.9 -> 1.7.11 -| | +--- net.bytebuddy:byte-buddy-agent:1.7.9 -> 1.7.11 -| | \--- org.objenesis:objenesis:2.6 -| +--- org.hamcrest:hamcrest-core:1.3 -| +--- org.hamcrest:hamcrest-library:1.3 -| | \--- org.hamcrest:hamcrest-core:1.3 -| +--- org.skyscreamer:jsonassert:1.5.0 -| | \--- com.vaadin.external.google:android-json:0.0.20131108.vaadin1 -| +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- org.springframework:spring-test:5.0.9.RELEASE -| | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| \--- org.xmlunit:xmlunit-core:2.5.1 -\--- org.junit.jupiter:junit-jupiter-engine:5.0.1 - +--- org.junit.platform:junit-platform-engine:1.0.1 - | +--- org.junit.platform:junit-platform-commons:1.0.1 -> 1.1.1 - | | \--- org.apiguardian:apiguardian-api:1.0.0 - | \--- org.opentest4j:opentest4j:1.0.0 - \--- org.junit.jupiter:junit-jupiter-api:5.0.1 -> 5.1.1 - +--- org.apiguardian:apiguardian-api:1.0.0 - +--- org.opentest4j:opentest4j:1.0.0 - \--- org.junit.platform:junit-platform-commons:1.1.1 (*) - -testCompileOnly - Compile only dependencies for source set 'test'. -No dependencies - -testImplementation - Implementation only dependencies for source set 'test'. (n) -+--- org.springframework.boot:spring-boot-starter-test (n) -\--- org.junit.jupiter:junit-jupiter-engine:5.0.1 (n) - -testRuntime - Runtime dependencies for source set 'test' (deprecated, use 'testRuntimeOnly' instead). -No dependencies - -testRuntimeClasspath - Runtime classpath of source set 'test'. -+--- org.springframework.boot:spring-boot-starter-data-jpa -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot:2.0.5.RELEASE -| | | +--- org.springframework:spring-core:5.0.9.RELEASE -| | | | \--- org.springframework:spring-jcl:5.0.9.RELEASE -| | | \--- org.springframework:spring-context:5.0.9.RELEASE -| | | +--- org.springframework:spring-aop:5.0.9.RELEASE -| | | | +--- org.springframework:spring-beans:5.0.9.RELEASE -| | | | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-expression:5.0.9.RELEASE -| | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | +--- org.springframework.boot:spring-boot-autoconfigure:2.0.5.RELEASE -| | | \--- org.springframework.boot:spring-boot:2.0.5.RELEASE (*) -| | +--- org.springframework.boot:spring-boot-starter-logging:2.0.5.RELEASE -| | | +--- ch.qos.logback:logback-classic:1.2.3 -| | | | +--- ch.qos.logback:logback-core:1.2.3 -| | | | \--- org.slf4j:slf4j-api:1.7.25 -| | | +--- org.apache.logging.log4j:log4j-to-slf4j:2.10.0 -| | | | +--- org.slf4j:slf4j-api:1.7.25 -| | | | \--- org.apache.logging.log4j:log4j-api:2.10.0 -| | | \--- org.slf4j:jul-to-slf4j:1.7.25 -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | +--- javax.annotation:javax.annotation-api:1.3.2 -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.yaml:snakeyaml:1.19 -| +--- org.springframework.boot:spring-boot-starter-aop:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| | \--- org.aspectj:aspectjweaver:1.8.13 -| +--- org.springframework.boot:spring-boot-starter-jdbc:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- com.zaxxer:HikariCP:2.7.9 -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | \--- org.springframework:spring-jdbc:5.0.9.RELEASE -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.springframework:spring-tx:5.0.9.RELEASE -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- javax.transaction:javax.transaction-api:1.2 -| +--- org.hibernate:hibernate-core:5.2.17.Final -| | +--- org.jboss.logging:jboss-logging:3.3.1.Final -> 3.3.2.Final -| | +--- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final -> 1.0.2.Final -| | +--- org.javassist:javassist:3.22.0-GA -> 3.23.1-GA -| | +--- antlr:antlr:2.7.7 -| | +--- org.jboss:jandex:2.0.3.Final -| | +--- com.fasterxml:classmate:1.3.0 -> 1.3.4 -| | +--- dom4j:dom4j:1.6.1 -| | \--- org.hibernate.common:hibernate-commons-annotations:5.0.1.Final -| | \--- org.jboss.logging:jboss-logging:3.3.0.Final -> 3.3.2.Final -| +--- org.springframework.data:spring-data-jpa:2.0.10.RELEASE -| | +--- org.springframework.data:spring-data-commons:2.0.10.RELEASE -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | \--- org.slf4j:slf4j-api:1.7.25 -| | +--- org.springframework:spring-orm:5.0.9.RELEASE -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | | +--- org.springframework:spring-jdbc:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-tx:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-context:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-tx:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | \--- org.slf4j:slf4j-api:1.7.25 -| \--- org.springframework:spring-aspects:5.0.9.RELEASE -| \--- org.aspectj:aspectjweaver:1.8.13 -+--- org.springframework.boot:spring-boot-starter-validation -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.34 -| \--- org.hibernate.validator:hibernate-validator:6.0.12.Final -| +--- javax.validation:validation-api:2.0.1.Final -| +--- org.jboss.logging:jboss-logging:3.3.2.Final -| \--- com.fasterxml:classmate:1.3.4 -+--- org.springframework.boot:spring-boot-starter-web -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.springframework.boot:spring-boot-starter-json:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| | +--- org.springframework:spring-web:5.0.9.RELEASE -| | | +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| | | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| | +--- com.fasterxml.jackson.core:jackson-databind:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -| | | \--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.6 -| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -| | | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| | \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.6 -| | +--- com.fasterxml.jackson.core:jackson-core:2.9.6 -| | \--- com.fasterxml.jackson.core:jackson-databind:2.9.6 (*) -| +--- org.springframework.boot:spring-boot-starter-tomcat:2.0.5.RELEASE -| | +--- javax.annotation:javax.annotation-api:1.3.2 -| | +--- org.apache.tomcat.embed:tomcat-embed-core:8.5.34 -| | +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.34 -| | \--- org.apache.tomcat.embed:tomcat-embed-websocket:8.5.34 -| | \--- org.apache.tomcat.embed:tomcat-embed-core:8.5.34 -| +--- org.hibernate.validator:hibernate-validator:6.0.12.Final (*) -| +--- org.springframework:spring-web:5.0.9.RELEASE (*) -| \--- org.springframework:spring-webmvc:5.0.9.RELEASE -| +--- org.springframework:spring-aop:5.0.9.RELEASE (*) -| +--- org.springframework:spring-beans:5.0.9.RELEASE (*) -| +--- org.springframework:spring-context:5.0.9.RELEASE (*) -| +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- org.springframework:spring-expression:5.0.9.RELEASE (*) -| \--- org.springframework:spring-web:5.0.9.RELEASE (*) -+--- javax.xml.bind:jaxb-api:2.3.1 -| \--- javax.activation:javax.activation-api:1.2.0 -+--- org.javassist:javassist:3.23.1-GA -+--- com.h2database:h2 -> 1.4.197 -+--- org.springframework.boot:spring-boot-starter-test -> 2.0.5.RELEASE -| +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*) -| +--- org.springframework.boot:spring-boot-test:2.0.5.RELEASE -| | \--- org.springframework.boot:spring-boot:2.0.5.RELEASE (*) -| +--- org.springframework.boot:spring-boot-test-autoconfigure:2.0.5.RELEASE -| | +--- org.springframework.boot:spring-boot-test:2.0.5.RELEASE (*) -| | \--- org.springframework.boot:spring-boot-autoconfigure:2.0.5.RELEASE (*) -| +--- com.jayway.jsonpath:json-path:2.4.0 -| | +--- net.minidev:json-smart:2.3 -| | | \--- net.minidev:accessors-smart:1.2 -| | | \--- org.ow2.asm:asm:5.0.4 -| | \--- org.slf4j:slf4j-api:1.7.25 -| +--- junit:junit:4.12 -| | \--- org.hamcrest:hamcrest-core:1.3 -| +--- org.assertj:assertj-core:3.9.1 -| +--- org.mockito:mockito-core:2.15.0 -| | +--- net.bytebuddy:byte-buddy:1.7.9 -> 1.7.11 -| | +--- net.bytebuddy:byte-buddy-agent:1.7.9 -> 1.7.11 -| | \--- org.objenesis:objenesis:2.6 -| +--- org.hamcrest:hamcrest-core:1.3 -| +--- org.hamcrest:hamcrest-library:1.3 -| | \--- org.hamcrest:hamcrest-core:1.3 -| +--- org.skyscreamer:jsonassert:1.5.0 -| | \--- com.vaadin.external.google:android-json:0.0.20131108.vaadin1 -| +--- org.springframework:spring-core:5.0.9.RELEASE (*) -| +--- org.springframework:spring-test:5.0.9.RELEASE -| | \--- org.springframework:spring-core:5.0.9.RELEASE (*) -| \--- org.xmlunit:xmlunit-core:2.5.1 -\--- org.junit.jupiter:junit-jupiter-engine:5.0.1 - +--- org.junit.platform:junit-platform-engine:1.0.1 - | +--- org.junit.platform:junit-platform-commons:1.0.1 -> 1.1.1 - | | \--- org.apiguardian:apiguardian-api:1.0.0 - | \--- org.opentest4j:opentest4j:1.0.0 - \--- org.junit.jupiter:junit-jupiter-api:5.0.1 -> 5.1.1 - +--- org.apiguardian:apiguardian-api:1.0.0 - +--- org.opentest4j:opentest4j:1.0.0 - \--- org.junit.platform:junit-platform-commons:1.1.1 (*) - -testRuntimeOnly - Runtime only dependencies for source set 'test'. (n) -No dependencies - -(*) - dependencies omitted (listed previously) - -(n) - Not resolved (configuration is not meant to be resolved) ++--- org.springframework.boot:spring-boot-starter-web -> 3.3.0 +| +--- org.springframework.boot:spring-boot-starter:3.3.0 +| | +--- org.springframework.boot:spring-boot:3.3.0 +| | | +--- org.springframework:spring-core:6.1.8 +| | | | \--- org.springframework:spring-jcl:6.1.8 +| | | \--- org.springframework:spring-context:6.1.8 +| | | +--- org.springframework:spring-aop:6.1.8 +| | | | +--- org.springframework:spring-beans:6.1.8 +| | | | | \--- org.springframework:spring-core:6.1.8 (*) +| | | | \--- org.springframework:spring-core:6.1.8 (*) +| | | +--- org.springframework:spring-beans:6.1.8 (*) +| | | +--- org.springframework:spring-core:6.1.8 (*) +| | | +--- org.springframework:spring-expression:6.1.8 +| | | | \--- org.springframework:spring-core:6.1.8 (*) +| | | \--- io.micrometer:micrometer-observation:1.12.6 -> 1.13.0 +| | | \--- io.micrometer:micrometer-commons:1.13.0 +| | +--- org.springframework.boot:spring-boot-autoconfigure:3.3.0 +| | | \--- org.springframework.boot:spring-boot:3.3.0 (*) +| | +--- org.springframework.boot:spring-boot-starter-logging:3.3.0 +| | | +--- ch.qos.logback:logback-classic:1.5.6 +| | | | +--- ch.qos.logback:logback-core:1.5.6 +| | | | \--- org.slf4j:slf4j-api:2.0.13 +| | | +--- org.apache.logging.log4j:log4j-to-slf4j:2.23.1 +| | | | +--- org.apache.logging.log4j:log4j-api:2.23.1 +| | | | \--- org.slf4j:slf4j-api:2.0.9 -> 2.0.13 +| | | \--- org.slf4j:jul-to-slf4j:2.0.13 +| | | \--- org.slf4j:slf4j-api:2.0.13 +| | +--- jakarta.annotation:jakarta.annotation-api:2.1.1 +| | +--- org.springframework:spring-core:6.1.8 (*) +| | \--- org.yaml:snakeyaml:2.2 +| +--- org.springframework.boot:spring-boot-starter-json:3.3.0 +| | +--- org.springframework.boot:spring-boot-starter:3.3.0 (*) +| | +--- org.springframework:spring-web:6.1.8 +| | | +--- org.springframework:spring-beans:6.1.8 (*) +| | | +--- org.springframework:spring-core:6.1.8 (*) +| | | \--- io.micrometer:micrometer-observation:1.12.6 -> 1.13.0 (*) +| | +--- com.fasterxml.jackson.core:jackson-databind:2.17.1 +| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.17.1 +| | | | \--- com.fasterxml.jackson:jackson-bom:2.17.1 +| | | | +--- com.fasterxml.jackson.core:jackson-annotations:2.17.1 (c) +| | | | +--- com.fasterxml.jackson.core:jackson-core:2.17.1 (c) +| | | | +--- com.fasterxml.jackson.core:jackson-databind:2.17.1 (c) +| | | | +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.17.1 (c) +| | | | +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1 (c) +| | | | \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.17.1 (c) +| | | +--- com.fasterxml.jackson.core:jackson-core:2.17.1 +| | | | \--- com.fasterxml.jackson:jackson-bom:2.17.1 (*) +| | | \--- com.fasterxml.jackson:jackson-bom:2.17.1 (*) +| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.17.1 +| | | +--- com.fasterxml.jackson.core:jackson-core:2.17.1 (*) +| | | +--- com.fasterxml.jackson.core:jackson-databind:2.17.1 (*) +| | | \--- com.fasterxml.jackson:jackson-bom:2.17.1 (*) +| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1 +| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.17.1 (*) +| | | +--- com.fasterxml.jackson.core:jackson-core:2.17.1 (*) +| | | +--- com.fasterxml.jackson.core:jackson-databind:2.17.1 (*) +| | | \--- com.fasterxml.jackson:jackson-bom:2.17.1 (*) +| | \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.17.1 +| | +--- com.fasterxml.jackson.core:jackson-core:2.17.1 (*) +| | +--- com.fasterxml.jackson.core:jackson-databind:2.17.1 (*) +| | \--- com.fasterxml.jackson:jackson-bom:2.17.1 (*) +| +--- org.springframework.boot:spring-boot-starter-tomcat:3.3.0 +| | +--- jakarta.annotation:jakarta.annotation-api:2.1.1 +| | +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.24 +| | +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.24 +| | \--- org.apache.tomcat.embed:tomcat-embed-websocket:10.1.24 +| | \--- org.apache.tomcat.embed:tomcat-embed-core:10.1.24 +| +--- org.springframework:spring-web:6.1.8 (*) +| \--- org.springframework:spring-webmvc:6.1.8 +| +--- org.springframework:spring-aop:6.1.8 (*) +| +--- org.springframework:spring-beans:6.1.8 (*) +| +--- org.springframework:spring-context:6.1.8 (*) +| +--- org.springframework:spring-core:6.1.8 (*) +| +--- org.springframework:spring-expression:6.1.8 (*) +| \--- org.springframework:spring-web:6.1.8 (*) ++--- org.springframework.boot:spring-boot-starter-validation -> 3.3.0 +| +--- org.springframework.boot:spring-boot-starter:3.3.0 (*) +| +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.24 +| \--- org.hibernate.validator:hibernate-validator:8.0.1.Final +| +--- jakarta.validation:jakarta.validation-api:3.0.2 +| +--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.5.3.Final +| \--- com.fasterxml:classmate:1.5.1 -> 1.7.0 ++--- org.springframework.boot:spring-boot-starter-data-jpa -> 3.3.0 +| +--- org.springframework.boot:spring-boot-starter-aop:3.3.0 +| | +--- org.springframework.boot:spring-boot-starter:3.3.0 (*) +| | +--- org.springframework:spring-aop:6.1.8 (*) +| | \--- org.aspectj:aspectjweaver:1.9.22 +| +--- org.springframework.boot:spring-boot-starter-jdbc:3.3.0 +| | +--- org.springframework.boot:spring-boot-starter:3.3.0 (*) +| | +--- com.zaxxer:HikariCP:5.1.0 +| | | \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.13 +| | \--- org.springframework:spring-jdbc:6.1.8 +| | +--- org.springframework:spring-beans:6.1.8 (*) +| | +--- org.springframework:spring-core:6.1.8 (*) +| | \--- org.springframework:spring-tx:6.1.8 +| | +--- org.springframework:spring-beans:6.1.8 (*) +| | \--- org.springframework:spring-core:6.1.8 (*) +| +--- org.hibernate.orm:hibernate-core:6.5.2.Final +| | +--- jakarta.persistence:jakarta.persistence-api:3.1.0 +| | +--- jakarta.transaction:jakarta.transaction-api:2.0.1 +| | +--- org.jboss.logging:jboss-logging:3.5.0.Final -> 3.5.3.Final +| | +--- org.hibernate.common:hibernate-commons-annotations:6.0.6.Final +| | +--- io.smallrye:jandex:3.1.2 +| | +--- com.fasterxml:classmate:1.5.1 -> 1.7.0 +| | +--- net.bytebuddy:byte-buddy:1.14.15 -> 1.14.16 +| | +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.0 -> 4.0.2 +| | | \--- jakarta.activation:jakarta.activation-api:2.1.3 +| | +--- org.glassfish.jaxb:jaxb-runtime:4.0.2 -> 4.0.5 +| | | \--- org.glassfish.jaxb:jaxb-core:4.0.5 +| | | +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2 (*) +| | | +--- jakarta.activation:jakarta.activation-api:2.1.3 +| | | +--- org.eclipse.angus:angus-activation:2.0.2 +| | | | \--- jakarta.activation:jakarta.activation-api:2.1.3 +| | | +--- org.glassfish.jaxb:txw2:4.0.5 +| | | \--- com.sun.istack:istack-commons-runtime:4.1.2 +| | +--- jakarta.inject:jakarta.inject-api:2.0.1 +| | \--- org.antlr:antlr4-runtime:4.13.0 +| +--- org.springframework.data:spring-data-jpa:3.3.0 +| | +--- org.springframework.data:spring-data-commons:3.3.0 +| | | +--- org.springframework:spring-core:6.1.7 -> 6.1.8 (*) +| | | +--- org.springframework:spring-beans:6.1.7 -> 6.1.8 (*) +| | | \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.13 +| | +--- org.springframework:spring-orm:6.1.7 -> 6.1.8 +| | | +--- org.springframework:spring-beans:6.1.8 (*) +| | | +--- org.springframework:spring-core:6.1.8 (*) +| | | +--- org.springframework:spring-jdbc:6.1.8 (*) +| | | \--- org.springframework:spring-tx:6.1.8 (*) +| | +--- org.springframework:spring-context:6.1.7 -> 6.1.8 (*) +| | +--- org.springframework:spring-aop:6.1.7 -> 6.1.8 (*) +| | +--- org.springframework:spring-tx:6.1.7 -> 6.1.8 (*) +| | +--- org.springframework:spring-beans:6.1.7 -> 6.1.8 (*) +| | +--- org.springframework:spring-core:6.1.7 -> 6.1.8 (*) +| | +--- org.antlr:antlr4-runtime:4.13.0 +| | +--- jakarta.annotation:jakarta.annotation-api:2.0.0 -> 2.1.1 +| | \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.13 +| \--- org.springframework:spring-aspects:6.1.8 +| \--- org.aspectj:aspectjweaver:1.9.22.1 -> 1.9.22 +\--- com.h2database:h2 -> 2.2.224 + +(c) - A dependency constraint, not a dependency. The dependency affected by the constraint occurs elsewhere in the tree. +(*) - Indicates repeated occurrences of a transitive dependency subtree. Gradle expands transitive dependency subtrees only once per project; repeat occurrences only display the root of the subtree, followed by this annotation. A web-based, searchable dependency report is available by adding the --scan option. -BUILD SUCCESSFUL in 1s +BUILD SUCCESSFUL in 24s 1 actionable task: 1 executed diff --git a/spring-boot/validation/gradle/wrapper/gradle-wrapper.jar b/spring-boot/validation/gradle/wrapper/gradle-wrapper.jar index 1ce6e58f1..e6441136f 100644 Binary files a/spring-boot/validation/gradle/wrapper/gradle-wrapper.jar and b/spring-boot/validation/gradle/wrapper/gradle-wrapper.jar differ diff --git a/spring-boot/validation/gradle/wrapper/gradle-wrapper.properties b/spring-boot/validation/gradle/wrapper/gradle-wrapper.properties index 7cd82e999..a4413138c 100644 --- a/spring-boot/validation/gradle/wrapper/gradle-wrapper.properties +++ b/spring-boot/validation/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ -#Tue Feb 06 12:27:20 CET 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/Input.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/Input.java index 5ad3250f8..5c001f123 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/Input.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/Input.java @@ -1,12 +1,16 @@ package io.reflectoring.validation; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.Pattern; - +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Pattern; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter @Entity public class Input { @@ -14,28 +18,13 @@ public class Input { @GeneratedValue private Long id; - @Min(1) - @Max(10) + @Min(value = 1, message = "{number.invalid}") + @Max(value = 10, message = "{number.invalid}") private int numberBetweenOneAndTen; // Note that this is actually not a valid IP address pattern, since // it allows values greater than 255 per octet. - @Pattern(regexp = "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$") + @Pattern(regexp = "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$", message = "{ip-address.invalid}") private String ipAddress; - public int getNumberBetweenOneAndTen() { - return numberBetweenOneAndTen; - } - - public void setNumberBetweenOneAndTen(int numberBetweenOneAndTen) { - this.numberBetweenOneAndTen = numberBetweenOneAndTen; - } - - public String getIpAddress() { - return ipAddress; - } - - public void setIpAddress(String ipAddress) { - this.ipAddress = ipAddress; - } } diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/InputWithCustomValidator.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/InputWithCustomValidator.java index 4036fd5a1..164e5003d 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/InputWithCustomValidator.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/InputWithCustomValidator.java @@ -1,17 +1,20 @@ package io.reflectoring.validation; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Null; - import io.reflectoring.validation.service.OnCreate; import io.reflectoring.validation.service.OnUpdate; - +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter @Entity public class InputWithCustomValidator { @@ -30,27 +33,4 @@ public class InputWithCustomValidator { @Column private String ipAddress; - public int getNumberBetweenOneAndTen() { - return numberBetweenOneAndTen; - } - - public void setNumberBetweenOneAndTen(int numberBetweenOneAndTen) { - this.numberBetweenOneAndTen = numberBetweenOneAndTen; - } - - public String getIpAddress() { - return ipAddress; - } - - public void setIpAddress(String ipAddress) { - this.ipAddress = ipAddress; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } } diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/IpAddress.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/IpAddress.java index e05173213..0e74eda92 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/IpAddress.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/IpAddress.java @@ -1,22 +1,22 @@ package io.reflectoring.validation; -import javax.validation.Constraint; -import javax.validation.Payload; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; -import static java.lang.annotation.ElementType.*; -import static java.lang.annotation.RetentionPolicy.RUNTIME; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; -@Target({ FIELD }) +@Target(FIELD) @Retention(RUNTIME) @Constraint(validatedBy = IpAddressValidator.class) @Documented public @interface IpAddress { - String message() default "{IpAddress.invalid}"; + String message() default "{ip-address.invalid}"; Class[] groups() default { }; diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/IpAddressValidator.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/IpAddressValidator.java index 02bb2dc92..a1f2da047 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/IpAddressValidator.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/IpAddressValidator.java @@ -1,32 +1,34 @@ package io.reflectoring.validation; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; - import java.util.regex.Matcher; import java.util.regex.Pattern; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + public class IpAddressValidator implements ConstraintValidator { + private static final Pattern IP_ADDRESS_PATTERN = Pattern.compile("^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$"); + @Override public boolean isValid(String value, ConstraintValidatorContext context) { - Pattern pattern = Pattern.compile("^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$"); - Matcher matcher = pattern.matcher(value); - try { - if (!matcher.matches()) { + Matcher matcher = IP_ADDRESS_PATTERN.matcher(value); + boolean isValidIpAddress = matcher.matches(); + + if (isValidIpAddress) { + isValidIpAddress = isValidOctets(matcher); + } + return isValidIpAddress; + } + + private boolean isValidOctets(Matcher matcher) { + for (int i = 1; i <= 4; i++) { + int octet = Integer.parseInt(matcher.group(i)); + if (octet < 0 || octet > 255) { return false; - } else { - for (int i = 1; i <= 4; i++) { - int octet = Integer.valueOf(matcher.group(i)); - if (octet > 255) { - return false; - } - } - return true; } - } catch (Exception e) { - return false; } + return true; } } diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/ProgrammerRegisterationRequest.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/ProgrammerRegisterationRequest.java new file mode 100644 index 000000000..9c14df19d --- /dev/null +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/ProgrammerRegisterationRequest.java @@ -0,0 +1,18 @@ +package io.reflectoring.validation; + +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@ProgrammerStereotype +public class ProgrammerRegisterationRequest { + + @NotBlank + private String programmingLanguage; + + @NotBlank + private String favoriteIDE; + +} \ No newline at end of file diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/ProgrammerStereotype.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/ProgrammerStereotype.java new file mode 100644 index 000000000..8fa00883e --- /dev/null +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/ProgrammerStereotype.java @@ -0,0 +1,25 @@ +package io.reflectoring.validation; + +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +@Documented +@Target(TYPE) +@Retention(RUNTIME) +@Constraint(validatedBy = ProgrammerStereotypeValidator.class) +public @interface ProgrammerStereotype { + + String message() default "Stereotype violation detected! IDE and language not vibing."; + + Class[] groups() default { }; + + Class[] payload() default { }; + +} diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/ProgrammerStereotypeValidator.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/ProgrammerStereotypeValidator.java new file mode 100644 index 000000000..556a9095b --- /dev/null +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/ProgrammerStereotypeValidator.java @@ -0,0 +1,22 @@ +package io.reflectoring.validation; + +import java.util.List; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +public class ProgrammerStereotypeValidator implements ConstraintValidator < ProgrammerStereotype, ProgrammerRegisterationRequest > { + + private static final List UNWORTHY_JAVA_IDES = List.of("Notepad", "Netbeans"); + + @Override + public boolean isValid(ProgrammerRegisterationRequest request, ConstraintValidatorContext context) { + if (request.getProgrammingLanguage().equalsIgnoreCase("Java")) { + if (UNWORTHY_JAVA_IDES.contains(request.getFavoriteIDE())) { + return false; + } + } + return true; + } + +} \ No newline at end of file diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/RequiredConfigurationProperties.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/RequiredConfigurationProperties.java new file mode 100644 index 000000000..23136eaa0 --- /dev/null +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/RequiredConfigurationProperties.java @@ -0,0 +1,25 @@ +package io.reflectoring.validation; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Validated +@ConfigurationProperties(prefix = "io.reflectoring.jwt") +public class RequiredConfigurationProperties { + + @NotBlank + private String privateKey; + + @NotNull + @Positive + private Integer validityMinutes; + +} \ No newline at end of file diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/ValidationApplication.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/ValidationApplication.java index 955d68e56..de75a9a2f 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/ValidationApplication.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/ValidationApplication.java @@ -2,11 +2,24 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.support.ReloadableResourceBundleMessageSource; @SpringBootApplication +@EnableConfigurationProperties(RequiredConfigurationProperties.class) public class ValidationApplication { - public static void main(String[] args) { - SpringApplication.run(ValidationApplication.class, args); - } -} + public static void main(String[] args) { + SpringApplication.run(ValidationApplication.class, args); + } + + @Bean + public MessageSource messageSource() { + ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); + messageSource.setBasenames("classpath:validation-errors"); + return messageSource; + } + +} \ No newline at end of file diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/ErrorHandlingControllerAdvice.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/ErrorHandlingControllerAdvice.java index 1b0711262..2e18ccb27 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/ErrorHandlingControllerAdvice.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/ErrorHandlingControllerAdvice.java @@ -1,39 +1,44 @@ package io.reflectoring.validation.controller.controlleradvice; -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; +import java.util.ArrayList; +import java.util.List; import org.springframework.http.HttpStatus; +import org.springframework.http.ProblemDetail; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; + +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; @ControllerAdvice class ErrorHandlingControllerAdvice { + + private static final String VIOLATIONS_KEY = "violations"; @ExceptionHandler(ConstraintViolationException.class) - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ResponseBody - ValidationErrorResponse onConstraintValidationException(ConstraintViolationException e) { - ValidationErrorResponse error = new ValidationErrorResponse(); - for (ConstraintViolation violation : e.getConstraintViolations()) { - error.getViolations().add(new Violation(violation.getPropertyPath().toString(), violation.getMessage())); + ProblemDetail handle(ConstraintViolationException exception) { + List < Violation > violations = new ArrayList < > (); + for (ConstraintViolation violation: exception.getConstraintViolations()) { + violations.add(new Violation(violation.getPropertyPath().toString(), violation.getMessage())); } - return error; + + ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "Validation failure."); + problemDetail.setProperty(VIOLATIONS_KEY, violations); + return problemDetail; } @ExceptionHandler(MethodArgumentNotValidException.class) - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ResponseBody - ValidationErrorResponse onMethodArgumentNotValidException(MethodArgumentNotValidException e) { - ValidationErrorResponse error = new ValidationErrorResponse(); - for (FieldError fieldError : e.getBindingResult().getFieldErrors()) { - error.getViolations().add(new Violation(fieldError.getField(), fieldError.getDefaultMessage())); + ProblemDetail handle(MethodArgumentNotValidException exception) { + List < Violation > violations = new ArrayList < > (); + for (FieldError fieldError: exception.getBindingResult().getFieldErrors()) { + violations.add(new Violation(fieldError.getField(), fieldError.getDefaultMessage())); } - return error; + ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "Validation failure."); + problemDetail.setProperty(VIOLATIONS_KEY, violations); + return problemDetail; } -} +} \ No newline at end of file diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/ValidationErrorResponse.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/ValidationErrorResponse.java deleted file mode 100644 index ec294ac9c..000000000 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/ValidationErrorResponse.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.reflectoring.validation.controller.controlleradvice; - -import java.util.ArrayList; -import java.util.List; - -public class ValidationErrorResponse { - - private List violations = new ArrayList<>(); - - public List getViolations() { - return violations; - } - - public void setViolations(List violations) { - this.violations = violations; - } -} diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/Violation.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/Violation.java index f3446516c..e43a7687f 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/Violation.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/controlleradvice/Violation.java @@ -1,21 +1,14 @@ package io.reflectoring.validation.controller.controlleradvice; -public class Violation { - - private final String fieldName; +import lombok.AllArgsConstructor; +import lombok.Getter; - private final String message; +@Getter +@AllArgsConstructor +public class Violation { - public Violation(String fieldName, String message) { - this.fieldName = fieldName; - this.message = message; - } + private String fieldName; - public String getFieldName() { - return fieldName; - } + private String message; - public String getMessage() { - return message; - } } diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/parameters/ValidateParametersController.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/parameters/ValidateParametersController.java index 0fad8afc3..824dd8bff 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/parameters/ValidateParametersController.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/parameters/ValidateParametersController.java @@ -1,9 +1,7 @@ package io.reflectoring.validation.controller.parameters; -import javax.validation.ConstraintViolationException; -import javax.validation.constraints.Min; - import org.springframework.http.HttpStatus; +import org.springframework.http.ProblemDetail; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -11,28 +9,30 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.constraints.Min; + @RestController @Validated class ValidateParametersController { - @GetMapping("/validatePathVariable/{id}") - ResponseEntity validatePathVariable(@PathVariable("id") @Min(5) int id) { - return ResponseEntity.ok("valid"); + @GetMapping("/validate-path-variable/{id}") + ResponseEntity validatePathVariable(@PathVariable("id") @Min(5) int id) { + return ResponseEntity.ok().build(); } - @GetMapping("/validateRequestParameter") - ResponseEntity validateRequestParameter(@RequestParam("param") @Min(5) int param) { - return ResponseEntity.ok("valid"); + @GetMapping("/validate-request-parameter") + ResponseEntity validateRequestParameter(@RequestParam("param") @Min(5) int param) { + return ResponseEntity.ok().build(); } - @ExceptionHandler(ConstraintViolationException.class) - @ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseBody - String handleConstraintViolationException(ConstraintViolationException e) { - return "not valid due to validation error: " + e.getMessage(); + @ExceptionHandler(ConstraintViolationException.class) + ProblemDetail handle(ConstraintViolationException exception) { + String detail = "Validation error: " + exception.getMessage(); + return ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, detail); } diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/requestbody/ValidateRequestBodyController.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/requestbody/ValidateRequestBodyController.java index 78fc604ac..8b6e01bf2 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/requestbody/ValidateRequestBodyController.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/controller/requestbody/ValidateRequestBodyController.java @@ -1,19 +1,19 @@ package io.reflectoring.validation.controller.requestbody; -import javax.validation.Valid; - -import io.reflectoring.validation.Input; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import io.reflectoring.validation.Input; +import jakarta.validation.Valid; + @RestController class ValidateRequestBodyController { - @PostMapping("/validateBody") - ResponseEntity validateBody(@Valid @RequestBody Input input) { - return ResponseEntity.ok("valid"); + @PostMapping("/validate-request-body") + ResponseEntity validateBody(@Valid @RequestBody Input input) { + return ResponseEntity.ok().build(); } } diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/repository/ValidatingRepository.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/repository/ValidatingRepository.java index 7031c2cd0..1f7ad903a 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/repository/ValidatingRepository.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/repository/ValidatingRepository.java @@ -1,7 +1,8 @@ package io.reflectoring.validation.repository; -import io.reflectoring.validation.Input; import org.springframework.data.repository.CrudRepository; +import io.reflectoring.validation.Input; + public interface ValidatingRepository extends CrudRepository { } diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/repository/ValidatingRepositoryWithCustomValidator.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/repository/ValidatingRepositoryWithCustomValidator.java index 363689024..f762a4ce9 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/repository/ValidatingRepositoryWithCustomValidator.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/repository/ValidatingRepositoryWithCustomValidator.java @@ -1,7 +1,8 @@ package io.reflectoring.validation.repository; -import io.reflectoring.validation.InputWithCustomValidator; import org.springframework.data.repository.CrudRepository; +import io.reflectoring.validation.InputWithCustomValidator; + public interface ValidatingRepositoryWithCustomValidator extends CrudRepository { } diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ProgrammaticallyValidatingService.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ProgrammaticallyValidatingService.java index 338f1d9d6..55054dd47 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ProgrammaticallyValidatingService.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ProgrammaticallyValidatingService.java @@ -1,20 +1,20 @@ package io.reflectoring.validation.service; -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; - import java.util.Set; -import io.reflectoring.validation.Input; import org.springframework.stereotype.Service; +import io.reflectoring.validation.Input; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; + @Service public class ProgrammaticallyValidatingService { - private Validator validator; + private final Validator validator; public ProgrammaticallyValidatingService(Validator validator) { this.validator = validator; diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ValidatingService.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ValidatingService.java index e9180f185..064250fdc 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ValidatingService.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ValidatingService.java @@ -1,11 +1,11 @@ package io.reflectoring.validation.service; -import javax.validation.Valid; - -import io.reflectoring.validation.Input; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import io.reflectoring.validation.Input; +import jakarta.validation.Valid; + @Service @Validated class ValidatingService { diff --git a/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ValidatingServiceWithGroups.java b/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ValidatingServiceWithGroups.java index 47199c4f3..cc54b5621 100644 --- a/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ValidatingServiceWithGroups.java +++ b/spring-boot/validation/src/main/java/io/reflectoring/validation/service/ValidatingServiceWithGroups.java @@ -1,11 +1,11 @@ package io.reflectoring.validation.service; -import javax.validation.Valid; - -import io.reflectoring.validation.InputWithCustomValidator; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import io.reflectoring.validation.InputWithCustomValidator; +import jakarta.validation.Valid; + @Service @Validated class ValidatingServiceWithGroups { diff --git a/spring-boot/validation/src/main/resources/ValidationMessages.properties b/spring-boot/validation/src/main/resources/ValidationMessages.properties deleted file mode 100644 index 93501ea76..000000000 --- a/spring-boot/validation/src/main/resources/ValidationMessages.properties +++ /dev/null @@ -1 +0,0 @@ -IpAddress.invalid=Invalid IP Address: "${validatedValue}"! \ No newline at end of file diff --git a/spring-boot/validation/src/main/resources/application.properties b/spring-boot/validation/src/main/resources/application.properties new file mode 100644 index 000000000..3e7fb0eb5 --- /dev/null +++ b/spring-boot/validation/src/main/resources/application.properties @@ -0,0 +1,4 @@ +spring.messages.basename=validation-errors + +io.reflectoring.jwt.private-key=test +io.reflectoring.jwt.validity-minutes=10 \ No newline at end of file diff --git a/spring-boot/validation/src/main/resources/validation-errors.properties b/spring-boot/validation/src/main/resources/validation-errors.properties new file mode 100644 index 000000000..09a0674ac --- /dev/null +++ b/spring-boot/validation/src/main/resources/validation-errors.properties @@ -0,0 +1,2 @@ +ip-address.invalid=Invalid IP address: '${validatedValue}' +number.invalid=The provided number '${validatedValue}' must be between ${min} and ${max} \ No newline at end of file diff --git a/spring-boot/validation/src/test/java/io/reflectoring/validation/IpAddressValidatorTest.java b/spring-boot/validation/src/test/java/io/reflectoring/validation/IpAddressValidatorTest.java index 498c86b47..9f0cdfdc5 100644 --- a/spring-boot/validation/src/test/java/io/reflectoring/validation/IpAddressValidatorTest.java +++ b/spring-boot/validation/src/test/java/io/reflectoring/validation/IpAddressValidatorTest.java @@ -1,14 +1,23 @@ package io.reflectoring.validation; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; class IpAddressValidatorTest { + private final IpAddressValidator validator = new IpAddressValidator(); + @Test - void test(){ - IpAddressValidator validator = new IpAddressValidator(); + void whenValidIpAddress_thenValidationSucceeds() { assertTrue(validator.isValid("111.111.111.111", null)); + assertTrue(validator.isValid("0.0.0.0", null)); + assertTrue(validator.isValid("255.255.255.255", null)); + } + + @Test + void whenInvalidIpAddress_thenValidationFails() { assertFalse(validator.isValid("111.foo.111.111", null)); assertFalse(validator.isValid("111.111.256.111", null)); } diff --git a/spring-boot/validation/src/test/java/io/reflectoring/validation/ProgrammaticallyValidatingServiceTest.java b/spring-boot/validation/src/test/java/io/reflectoring/validation/ProgrammaticallyValidatingServiceTest.java index 1ddd49ef5..1827e53d2 100644 --- a/spring-boot/validation/src/test/java/io/reflectoring/validation/ProgrammaticallyValidatingServiceTest.java +++ b/spring-boot/validation/src/test/java/io/reflectoring/validation/ProgrammaticallyValidatingServiceTest.java @@ -1,16 +1,14 @@ package io.reflectoring.validation; -import javax.validation.ConstraintViolationException; +import static org.junit.jupiter.api.Assertions.assertThrows; -import io.reflectoring.validation.service.ProgrammaticallyValidatingService; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import static org.junit.jupiter.api.Assertions.*; -@ExtendWith(SpringExtension.class) +import io.reflectoring.validation.service.ProgrammaticallyValidatingService; +import jakarta.validation.ConstraintViolationException; + @SpringBootTest class ProgrammaticallyValidatingServiceTest { diff --git a/spring-boot/validation/src/test/java/io/reflectoring/validation/ProgrammerSteriotypeValidationTest.java b/spring-boot/validation/src/test/java/io/reflectoring/validation/ProgrammerSteriotypeValidationTest.java new file mode 100644 index 000000000..01bfdc7b7 --- /dev/null +++ b/spring-boot/validation/src/test/java/io/reflectoring/validation/ProgrammerSteriotypeValidationTest.java @@ -0,0 +1,53 @@ +package io.reflectoring.validation; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; + +class ProgrammerSteriotypeValidationTest { + + private Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + + @Test + void whenJavaProgrammerUsesNotepad_thenValidationFails() { + ProgrammerRegisterationRequest request = new ProgrammerRegisterationRequest(); + request.setProgrammingLanguage("Java"); + request.setFavoriteIDE("Notepad"); + + var violations = validator.validate(request); + + assertFalse(violations.isEmpty()); + assertThat(violations) + .extracting(ConstraintViolation::getMessage) + .contains("Stereotype violation detected! IDE and language not vibing."); + } + + @Test + void whenJavaProgrammerUsesIntelliJ_thenValidationSucceeds() { + ProgrammerRegisterationRequest request = new ProgrammerRegisterationRequest(); + request.setProgrammingLanguage("Java"); + request.setFavoriteIDE("IntelliJ"); + + var violations = validator.validate(request); + + assertTrue(violations.isEmpty()); + } + + @Test + void whenNonJavaProgrammer_thenValidationSucceeds() { + ProgrammerRegisterationRequest request = new ProgrammerRegisterationRequest(); + request.setProgrammingLanguage("Javascript"); + request.setFavoriteIDE("VS Code"); + + var violations = validator.validate(request); + + assertTrue(violations.isEmpty()); + } + +} \ No newline at end of file diff --git a/spring-boot/validation/src/test/java/io/reflectoring/validation/ValidationApplicationTests.java b/spring-boot/validation/src/test/java/io/reflectoring/validation/ValidationApplicationTests.java deleted file mode 100644 index 35778b8f7..000000000 --- a/spring-boot/validation/src/test/java/io/reflectoring/validation/ValidationApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.reflectoring.validation; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class ValidationApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/spring-boot/validation/src/test/java/io/reflectoring/validation/controller/parameters/ValidateParametersControllerTest.java b/spring-boot/validation/src/test/java/io/reflectoring/validation/controller/parameters/ValidateParametersControllerTest.java index e75806530..e2d66cf2d 100644 --- a/spring-boot/validation/src/test/java/io/reflectoring/validation/controller/parameters/ValidateParametersControllerTest.java +++ b/spring-boot/validation/src/test/java/io/reflectoring/validation/controller/parameters/ValidateParametersControllerTest.java @@ -1,15 +1,17 @@ package io.reflectoring.validation.controller.parameters; +import static org.hamcrest.CoreMatchers.startsWith; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -@ExtendWith(SpringExtension.class) +import lombok.SneakyThrows; + @WebMvcTest(controllers = ValidateParametersController.class) class ValidateParametersControllerTest { @@ -17,21 +19,40 @@ class ValidateParametersControllerTest { private MockMvc mvc; @Test - void whenPathVariableIsInvalid_thenReturnsStatus400() throws Exception { - mvc.perform(get("/validatePathVariable/3")) - .andExpect(status().isBadRequest()); + @SneakyThrows + void whenPathVariableIsInvalid_thenReturnsStatus400() { + String apiPath = "/validate-path-variable/3"; + mvc.perform(get(apiPath)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.status").value(400)) + .andExpect(jsonPath("$.instance").value(apiPath)) + .andExpect(jsonPath("$.detail").value(startsWith("Validation error:"))); } @Test - void whenRequestParameterIsInvalid_thenReturnsStatus400() throws Exception { - mvc.perform(get("/validateRequestParameter") + @SneakyThrows + void whenRequestParameterIsInvalid_thenReturnsStatus400() { + String apiPath = "/validate-request-parameter"; + mvc.perform(get(apiPath) .param("param", "3")) - .andExpect(status().isBadRequest()); + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.status").value(400)) + .andExpect(jsonPath("$.instance").value(apiPath)) + .andExpect(jsonPath("$.detail").value(startsWith("Validation error:"))); } @Test - void whenPathVariableIsValid_thenReturnsStatus200() throws Exception { - mvc.perform(get("/validatePathVariable/10")) + @SneakyThrows + void whenPathVariableIsValid_thenReturnsStatus200() { + mvc.perform(get("/validate-path-variable/10")) + .andExpect(status().isOk()); + } + + @Test + @SneakyThrows + void whenRequestParameterIsValid_thenReturnsStatus200() { + mvc.perform(get("/validate-request-parameter") + .param("param", "10")) .andExpect(status().isOk()); } diff --git a/spring-boot/validation/src/test/java/io/reflectoring/validation/controller/requestbody/ValidateRequestBodyControllerTest.java b/spring-boot/validation/src/test/java/io/reflectoring/validation/controller/requestbody/ValidateRequestBodyControllerTest.java index 527be8022..745daf1bc 100644 --- a/spring-boot/validation/src/test/java/io/reflectoring/validation/controller/requestbody/ValidateRequestBodyControllerTest.java +++ b/spring-boot/validation/src/test/java/io/reflectoring/validation/controller/requestbody/ValidateRequestBodyControllerTest.java @@ -1,19 +1,20 @@ package io.reflectoring.validation.controller.requestbody; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.reflectoring.validation.Input; +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; -import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -@ExtendWith(SpringExtension.class) +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.reflectoring.validation.Input; +import lombok.SneakyThrows; + @WebMvcTest(controllers = ValidateRequestBodyController.class) class ValidateRequestBodyControllerTest { @@ -24,11 +25,12 @@ class ValidateRequestBodyControllerTest { private ObjectMapper objectMapper; @Test - void whenInputIsInvalid_thenReturnsStatus400() throws Exception { + @SneakyThrows + void whenInputIsInvalid_thenReturnsStatus400() { Input input = invalidInput(); String body = objectMapper.writeValueAsString(input); - mvc.perform(post("/validateBody") + mvc.perform(post("/validate-request-body") .contentType("application/json") .content(body)) .andExpect(status().isBadRequest()); @@ -42,11 +44,12 @@ private Input invalidInput() { } @Test - void whenInputIsInvalid_thenReturnsStatus400WithErrorObject() throws Exception { + @SneakyThrows + void whenInputIsInvalid_thenReturnsStatus400WithErrorObject() { Input input = invalidInput(); String body = objectMapper.writeValueAsString(input); - MvcResult result = mvc.perform(post("/validateBody") + MvcResult result = mvc.perform(post("/validate-request-body") .contentType("application/json") .content(body)) .andExpect(status().isBadRequest()) @@ -56,11 +59,12 @@ void whenInputIsInvalid_thenReturnsStatus400WithErrorObject() throws Exception { } @Test - void whenInputIsValid_thenReturnsStatus200() throws Exception { + @SneakyThrows + void whenInputIsValid_thenReturnsStatus200() { Input input = validInput(); String body = objectMapper.writeValueAsString(input); - mvc.perform(post("/validateBody") + mvc.perform(post("/validate-request-body") .contentType("application/json") .content(body)) .andExpect(status().isOk()); diff --git a/spring-boot/validation/src/test/java/io/reflectoring/validation/repository/ValidatingRepositoryTest.java b/spring-boot/validation/src/test/java/io/reflectoring/validation/repository/ValidatingRepositoryTest.java index 5ae568b76..41c37a6ba 100644 --- a/spring-boot/validation/src/test/java/io/reflectoring/validation/repository/ValidatingRepositoryTest.java +++ b/spring-boot/validation/src/test/java/io/reflectoring/validation/repository/ValidatingRepositoryTest.java @@ -1,18 +1,15 @@ package io.reflectoring.validation.repository; -import javax.persistence.EntityManager; -import javax.validation.ConstraintViolationException; +import static org.junit.jupiter.api.Assertions.assertThrows; -import io.reflectoring.validation.Input; -import io.reflectoring.validation.repository.ValidatingRepository; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import static org.junit.jupiter.api.Assertions.*; -@ExtendWith(SpringExtension.class) +import io.reflectoring.validation.Input; +import jakarta.persistence.EntityManager; +import jakarta.validation.ConstraintViolationException; + @DataJpaTest class ValidatingRepositoryTest { diff --git a/spring-boot/validation/src/test/java/io/reflectoring/validation/repository/ValidatingRepositoryWithCustomValidatorTest.java b/spring-boot/validation/src/test/java/io/reflectoring/validation/repository/ValidatingRepositoryWithCustomValidatorTest.java index 49b94ce6c..16376403b 100644 --- a/spring-boot/validation/src/test/java/io/reflectoring/validation/repository/ValidatingRepositoryWithCustomValidatorTest.java +++ b/spring-boot/validation/src/test/java/io/reflectoring/validation/repository/ValidatingRepositoryWithCustomValidatorTest.java @@ -1,18 +1,16 @@ package io.reflectoring.validation.repository; -import javax.persistence.EntityManager; -import javax.validation.ConstraintViolationException; +import static org.assertj.core.api.Assertions.assertThat; -import io.reflectoring.validation.InputWithCustomValidator; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import static org.assertj.core.api.Java6Assertions.assertThat; -@ExtendWith(SpringExtension.class) +import io.reflectoring.validation.InputWithCustomValidator; +import jakarta.persistence.EntityManager; +import jakarta.validation.ConstraintViolationException; + @DataJpaTest class ValidatingRepositoryWithCustomValidatorTest { diff --git a/spring-boot/validation/src/test/java/io/reflectoring/validation/service/ValidatingServiceTest.java b/spring-boot/validation/src/test/java/io/reflectoring/validation/service/ValidatingServiceTest.java index 51ba600df..78a21ffc4 100644 --- a/spring-boot/validation/src/test/java/io/reflectoring/validation/service/ValidatingServiceTest.java +++ b/spring-boot/validation/src/test/java/io/reflectoring/validation/service/ValidatingServiceTest.java @@ -1,17 +1,14 @@ package io.reflectoring.validation.service; -import javax.validation.ConstraintViolationException; +import static org.junit.jupiter.api.Assertions.assertThrows; -import io.reflectoring.validation.Input; -import io.reflectoring.validation.service.ValidatingService; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import static org.junit.jupiter.api.Assertions.assertThrows; -@ExtendWith(SpringExtension.class) +import io.reflectoring.validation.Input; +import jakarta.validation.ConstraintViolationException; + @SpringBootTest class ValidatingServiceTest { diff --git a/spring-boot/validation/src/test/java/io/reflectoring/validation/service/ValidatingServiceWithGroupsTest.java b/spring-boot/validation/src/test/java/io/reflectoring/validation/service/ValidatingServiceWithGroupsTest.java index 6193e3f02..732b8a837 100644 --- a/spring-boot/validation/src/test/java/io/reflectoring/validation/service/ValidatingServiceWithGroupsTest.java +++ b/spring-boot/validation/src/test/java/io/reflectoring/validation/service/ValidatingServiceWithGroupsTest.java @@ -1,16 +1,14 @@ package io.reflectoring.validation.service; -import javax.validation.ConstraintViolationException; +import static org.junit.jupiter.api.Assertions.assertThrows; -import io.reflectoring.validation.InputWithCustomValidator; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import static org.junit.jupiter.api.Assertions.*; -@ExtendWith(SpringExtension.class) +import io.reflectoring.validation.InputWithCustomValidator; +import jakarta.validation.ConstraintViolationException; + @SpringBootTest class ValidatingServiceWithGroupsTest {