From e65ce930bbe6f61c2b3279b958c31d8d42390dab Mon Sep 17 00:00:00 2001 From: Roger <587230+rojyates@users.noreply.github.com> Date: Sun, 17 Jul 2022 05:17:36 +1000 Subject: [PATCH] BAEL-5642 Using @NotNull as a method parameter (#12483) * BAEL-5642 Using @NotNull as a method parameter * BAEL-5642 Add Spring Boot and bump spring and hibernate-validator versions --- javaxval/pom.xml | 18 ++++++-- .../notnull/NotNullMethodParameter.java | 22 ++++++++++ .../javaxval/notnull/ValidatingComponent.java | 21 +++++++++ .../NotNullMethodParameterUnitTest.java | 21 +++++++++ .../ValidatingComponentIntegrationTest.java | 43 +++++++++++++++++++ 5 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 javaxval/src/main/java/com/baeldung/javaxval/notnull/NotNullMethodParameter.java create mode 100644 javaxval/src/main/java/com/baeldung/javaxval/notnull/ValidatingComponent.java create mode 100644 javaxval/src/test/java/com/baeldung/javaxval/notnull/NotNullMethodParameterUnitTest.java create mode 100644 javaxval/src/test/java/com/baeldung/javaxval/notnull/ValidatingComponentIntegrationTest.java diff --git a/javaxval/pom.xml b/javaxval/pom.xml index e6ecee6cfb..a88bde35f8 100644 --- a/javaxval/pom.xml +++ b/javaxval/pom.xml @@ -34,8 +34,19 @@ spring-test ${org.springframework.version} + + org.springframework.boot + spring-boot-starter-validation + ${spring.boot.version} + + + org.springframework.boot + spring-boot-starter-test + ${spring.boot.version} + test + - + - 6.0.13.Final + 6.2.3.Final 6.2.0.Final 3.6.1 1.8 1.8 3.0.0 - 5.0.2.RELEASE + 5.3.21 + 2.7.1 \ No newline at end of file diff --git a/javaxval/src/main/java/com/baeldung/javaxval/notnull/NotNullMethodParameter.java b/javaxval/src/main/java/com/baeldung/javaxval/notnull/NotNullMethodParameter.java new file mode 100644 index 0000000000..47f0ee69fe --- /dev/null +++ b/javaxval/src/main/java/com/baeldung/javaxval/notnull/NotNullMethodParameter.java @@ -0,0 +1,22 @@ +package com.baeldung.javaxval.notnull; + +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.ValidatorFactory; +import javax.validation.constraints.NotNull; + +public class NotNullMethodParameter { + + ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + Validator validator = factory.getValidator(); + + public int doesNotValidateNotNull(@NotNull String myString) { + return myString.length(); + } + + public int validateNotNull(@NotNull String myString) { + validator.validate(myString); + return myString.length(); + } + +} \ No newline at end of file diff --git a/javaxval/src/main/java/com/baeldung/javaxval/notnull/ValidatingComponent.java b/javaxval/src/main/java/com/baeldung/javaxval/notnull/ValidatingComponent.java new file mode 100644 index 0000000000..919001bd55 --- /dev/null +++ b/javaxval/src/main/java/com/baeldung/javaxval/notnull/ValidatingComponent.java @@ -0,0 +1,21 @@ +package com.baeldung.javaxval.notnull; + +import org.springframework.stereotype.Component; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotNull; + +@Component +@Validated +public class ValidatingComponent { + + public int validateNotNull(@NotNull String data) + { + return data.length(); + } + + public int callAnnotatedMethod(String data) { + return validateNotNull(data); + } + +} diff --git a/javaxval/src/test/java/com/baeldung/javaxval/notnull/NotNullMethodParameterUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/notnull/NotNullMethodParameterUnitTest.java new file mode 100644 index 0000000000..bfc34331e5 --- /dev/null +++ b/javaxval/src/test/java/com/baeldung/javaxval/notnull/NotNullMethodParameterUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.javaxval.notnull; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +class NotNullMethodParameterUnitTest { + + private NotNullMethodParameter demo = new NotNullMethodParameter(); + + @Test + public void givenNull_whenInvokedwithNoValidator_thenNullPointerException() { + assertThrows(NullPointerException.class, () -> demo.doesNotValidateNotNull(null)); + } + + @Test + public void givenNull_whenInvokedWithValidator_thenIllegalArgumentException() { + assertThrows(IllegalArgumentException.class, () -> demo.validateNotNull(null)); + } + +} \ No newline at end of file diff --git a/javaxval/src/test/java/com/baeldung/javaxval/notnull/ValidatingComponentIntegrationTest.java b/javaxval/src/test/java/com/baeldung/javaxval/notnull/ValidatingComponentIntegrationTest.java new file mode 100644 index 0000000000..dbeba3e812 --- /dev/null +++ b/javaxval/src/test/java/com/baeldung/javaxval/notnull/ValidatingComponentIntegrationTest.java @@ -0,0 +1,43 @@ +package com.baeldung.javaxval.notnull; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.constraints.NotNull; +import java.util.Set; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@SpringBootTest +class ValidatingComponentIntegrationTest { + + @Autowired ValidatingComponent component; + + @Test + void givenValue_whenValidate_thenSuccess() { + assertThat(component.validateNotNull("Not null!"), is(9)); + } + + @Test + void givenNull_whenValidate_thenConstraintViolationException() { + ConstraintViolationException constraintViolationException = assertThrows(ConstraintViolationException.class, () -> component.validateNotNull(null)); + Set> constraintViolations = constraintViolationException.getConstraintViolations(); + assertThat(constraintViolations.iterator().next().getConstraintDescriptor().getAnnotation().annotationType(), is(NotNull.class)); + } + + @Test + void givenNull_whenOnlyCalledMethodHasAnnotation_thenNoValidation() { + assertThrows(NullPointerException.class, () -> component.callAnnotatedMethod(null)); + } + + @SpringBootApplication + static class TestApplication { + } + +} \ No newline at end of file