Resolve merge conflict
The convert method in ArgumentMethodArgumentResolver is gone and in any case ProjectedPayloadMethodArgumentResolver mainly needs to know the name of the argument if an Argument annotation is present. See gh-202
This commit is contained in:
@@ -121,7 +121,7 @@ public class AnnotatedControllerConfigurer
|
||||
public void afterPropertiesSet() {
|
||||
this.argumentResolvers = new HandlerMethodArgumentResolverComposite();
|
||||
if (springDataPresent) {
|
||||
this.argumentResolvers.addResolver(new ProjectedPayloadMethodArgumentResolver(this.conversionService));
|
||||
this.argumentResolvers.addResolver(new ProjectedPayloadMethodArgumentResolver());
|
||||
}
|
||||
this.argumentResolvers.addResolver(new ArgumentMapMethodArgumentResolver());
|
||||
this.argumentResolvers.addResolver(new ArgumentMethodArgumentResolver(this.conversionService));
|
||||
|
||||
@@ -59,18 +59,7 @@ public class ArgumentMethodArgumentResolver implements HandlerMethodArgumentReso
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object resolveArgument(MethodParameter parameter, DataFetchingEnvironment environment) throws Exception {
|
||||
Argument annotation = parameter.getParameterAnnotation(Argument.class);
|
||||
Assert.notNull(annotation, "No @Argument annotation");
|
||||
String name = annotation.name();
|
||||
if (!StringUtils.hasText(name)) {
|
||||
name = parameter.getParameterName();
|
||||
if (name == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"Name for argument of type [" + parameter.getNestedParameterType().getName() +
|
||||
"] not specified, and parameter name information not found in class file either.");
|
||||
}
|
||||
}
|
||||
|
||||
String name = getArgumentName(parameter);
|
||||
Object rawValue = environment.getArgument(name);
|
||||
TypeDescriptor typeDescriptor = new TypeDescriptor(parameter);
|
||||
|
||||
@@ -111,6 +100,21 @@ public class ArgumentMethodArgumentResolver implements HandlerMethodArgumentReso
|
||||
return wrapAsOptionalIfNecessary(target, typeDescriptor.getType());
|
||||
}
|
||||
|
||||
static String getArgumentName(MethodParameter parameter) {
|
||||
Argument annotation = parameter.getParameterAnnotation(Argument.class);
|
||||
Assert.state(annotation != null, "Expected @Argument annotation");
|
||||
if (StringUtils.hasText(annotation.name())) {
|
||||
return annotation.name();
|
||||
}
|
||||
String parameterName = parameter.getParameterName();
|
||||
if (parameterName != null) {
|
||||
return parameterName;
|
||||
}
|
||||
throw new IllegalArgumentException(
|
||||
"Name for argument of type [" + parameter.getNestedParameterType().getName() +
|
||||
"] not specified, and parameter name information not found in class file either.");
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Object wrapAsOptionalIfNecessary(@Nullable Object value, Class<?> type) {
|
||||
return (type.equals(Optional.class) ? Optional.ofNullable(value) : value);
|
||||
|
||||
@@ -24,12 +24,10 @@ import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.BeanFactoryAware;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.annotation.AnnotatedElementUtils;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.data.projection.SpelAwareProxyProjectionFactory;
|
||||
import org.springframework.data.web.ProjectedPayload;
|
||||
import org.springframework.graphql.data.method.HandlerMethodArgumentResolver;
|
||||
import org.springframework.graphql.data.method.annotation.Argument;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
/**
|
||||
* Resolver to obtain a {@link ProjectedPayload @ProjectedPayload}
|
||||
@@ -63,16 +61,6 @@ public class ProjectedPayloadMethodArgumentResolver implements HandlerMethodArgu
|
||||
|
||||
private final SpelAwareProxyProjectionFactory projectionFactory = new SpelAwareProxyProjectionFactory();
|
||||
|
||||
private final ArgumentMethodArgumentResolver argumentResolver;
|
||||
|
||||
public ProjectedPayloadMethodArgumentResolver(@Nullable ConversionService conversionService) {
|
||||
this.argumentResolver = new ArgumentMethodArgumentResolver(conversionService){
|
||||
@Override
|
||||
protected Object convert(Object rawValue, Class<?> targetType) {
|
||||
return project(targetType, rawValue);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsParameter(MethodParameter parameter) {
|
||||
@@ -87,15 +75,17 @@ public class ProjectedPayloadMethodArgumentResolver implements HandlerMethodArgu
|
||||
|
||||
@Override
|
||||
public Object resolveArgument(MethodParameter parameter, DataFetchingEnvironment environment) throws Exception {
|
||||
if(parameter.getParameterAnnotation(Argument.class) != null){
|
||||
return argumentResolver.resolveArgument(parameter, environment);
|
||||
}
|
||||
String name = (parameter.hasParameterAnnotation(Argument.class) ?
|
||||
ArgumentMethodArgumentResolver.getArgumentName(parameter) : null);
|
||||
|
||||
return project(parameter.getParameterType(), environment.getArguments());
|
||||
Object projectionSource = (name != null ?
|
||||
environment.getArgument(name) : environment.getArguments());
|
||||
|
||||
return project(parameter.getParameterType(), projectionSource);
|
||||
}
|
||||
|
||||
protected Object project(Class<?> projectionType, Object source){
|
||||
return this.projectionFactory.createProjection(projectionType, source);
|
||||
protected Object project(Class<?> projectionType, Object projectionSource){
|
||||
return this.projectionFactory.createProjection(projectionType, projectionSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user