Support bean validation with ArgumentValue wrapper

See gh-737
This commit is contained in:
Babur
2023-06-21 10:16:26 +02:00
committed by rstoyanchev
parent 5be2d8c01b
commit ebb3ac69fa
3 changed files with 27 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
package org.springframework.graphql.data.method.annotation.support;
import jakarta.validation.valueextraction.ExtractedValue;
import jakarta.validation.valueextraction.UnwrapByDefault;
import jakarta.validation.valueextraction.ValueExtractor;
import org.springframework.graphql.data.ArgumentValue;
@UnwrapByDefault
public class ArgumentValueExtractor implements ValueExtractor<ArgumentValue<@ExtractedValue ?>> {
@Override
public void extractValues(ArgumentValue<?> originalValue, ValueReceiver receiver) {
if (originalValue.isPresent()) {
receiver.value(null, originalValue.value());
}
}
}

View File

@@ -0,0 +1 @@
org.springframework.graphql.data.method.annotation.support.ArgumentValueExtractor

View File

@@ -27,6 +27,7 @@ import jakarta.validation.ConstraintViolationException;
import jakarta.validation.Valid;
import jakarta.validation.Validation;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import org.assertj.core.api.InstanceOfAssertFactories;
import org.assertj.core.api.IterableAssert;
@@ -34,6 +35,7 @@ import org.assertj.core.api.ThrowableAssert;
import org.junit.jupiter.api.Test;
import org.springframework.beans.BeanUtils;
import org.springframework.graphql.data.ArgumentValue;
import org.springframework.graphql.data.method.HandlerMethod;
import org.springframework.validation.annotation.Validated;
@@ -68,6 +70,9 @@ class ValidationHelperTests {
BiConsumer<Object, Object[]> validator2 = createValidator(MyBean.class, "myValidatedParameterMethod");
assertViolation(() -> validator2.accept(bean, new Object[] {new ConstrainedInput(100)}), "integerValue");
BiConsumer<Object, Object[]> validator3 = createValidator(MyBean.class, "myValidArgumentValue");
assertViolation(() -> validator3.accept(bean, new Object[] {ArgumentValue.ofNullable("")}), "myValidArgumentValue.arg0");
}
@Test
@@ -154,6 +159,10 @@ class ValidationHelperTests {
public Object myValidatedParameterMethod(@Validated ConstrainedInput input) {
return null;
}
public Object myValidArgumentValue(@Valid ArgumentValue<@NotBlank String> arg0) {
return null;
}
}