Skip to content

Commit ebb3ac6

Browse files
bduisenovrstoyanchev
authored andcommitted
Support bean validation with ArgumentValue wrapper
See gh-737
1 parent 5be2d8c commit ebb3ac6

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.springframework.graphql.data.method.annotation.support;
2+
3+
import jakarta.validation.valueextraction.ExtractedValue;
4+
import jakarta.validation.valueextraction.UnwrapByDefault;
5+
import jakarta.validation.valueextraction.ValueExtractor;
6+
import org.springframework.graphql.data.ArgumentValue;
7+
8+
@UnwrapByDefault
9+
public class ArgumentValueExtractor implements ValueExtractor<ArgumentValue<@ExtractedValue ?>> {
10+
11+
@Override
12+
public void extractValues(ArgumentValue<?> originalValue, ValueReceiver receiver) {
13+
if (originalValue.isPresent()) {
14+
receiver.value(null, originalValue.value());
15+
}
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.springframework.graphql.data.method.annotation.support.ArgumentValueExtractor

spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/ValidationHelperTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,15 @@
2727
import jakarta.validation.Valid;
2828
import jakarta.validation.Validation;
2929
import jakarta.validation.constraints.Max;
30+
import jakarta.validation.constraints.NotBlank;
3031
import jakarta.validation.constraints.NotNull;
3132
import org.assertj.core.api.InstanceOfAssertFactories;
3233
import org.assertj.core.api.IterableAssert;
3334
import org.assertj.core.api.ThrowableAssert;
3435
import org.junit.jupiter.api.Test;
3536

3637
import org.springframework.beans.BeanUtils;
38+
import org.springframework.graphql.data.ArgumentValue;
3739
import org.springframework.graphql.data.method.HandlerMethod;
3840
import org.springframework.validation.annotation.Validated;
3941

@@ -68,6 +70,9 @@ void shouldRaiseValidationErrorForAnnotatedParams() {
6870

6971
BiConsumer<Object, Object[]> validator2 = createValidator(MyBean.class, "myValidatedParameterMethod");
7072
assertViolation(() -> validator2.accept(bean, new Object[] {new ConstrainedInput(100)}), "integerValue");
73+
74+
BiConsumer<Object, Object[]> validator3 = createValidator(MyBean.class, "myValidArgumentValue");
75+
assertViolation(() -> validator3.accept(bean, new Object[] {ArgumentValue.ofNullable("")}), "myValidArgumentValue.arg0");
7176
}
7277

7378
@Test
@@ -154,6 +159,10 @@ public Object myValidMethod(@NotNull String arg0, @Max(10) int arg1) {
154159
public Object myValidatedParameterMethod(@Validated ConstrainedInput input) {
155160
return null;
156161
}
162+
163+
public Object myValidArgumentValue(@Valid ArgumentValue<@NotBlank String> arg0) {
164+
return null;
165+
}
157166
}
158167

159168

0 commit comments

Comments
 (0)