@Override public boolean supportsParameter(MethodParameter param) { return checkAnnotatedParamNoReactiveWrapper(param, RequestParam.class, this::allParams); }
private Object resolve(MethodParameter parameter, ServerWebExchange exchange) { return this.resolver.resolveArgument(parameter, null, exchange).block(Duration.ofMillis(0)); }
result.add(new RequestParamMapMethodArgumentResolver(reactiveRegistry)); result.add(new PathVariableMethodArgumentResolver(beanFactory, reactiveRegistry)); result.add(new PathVariableMapMethodArgumentResolver(reactiveRegistry));
@Override public Optional<Object> resolveArgumentValue(MethodParameter parameter, BindingContext context, ServerWebExchange exchange) { MultiValueMap<String, String> requestParams = getRequestParams(exchange); Object value = (isMultiValueMap(parameter) ? requestParams : requestParams.toSingleValueMap()); return Optional.of(value); }
@Test public void supportsParameter() { MethodParameter param = this.testMethod.annot(requestParam().name("")).arg(Map.class); assertTrue(this.resolver.supportsParameter(param)); param = this.testMethod.annotPresent(RequestParam.class).arg(MultiValueMap.class); assertTrue(this.resolver.supportsParameter(param)); param = this.testMethod.annot(requestParam().name("name")).arg(Map.class); assertFalse(this.resolver.supportsParameter(param)); param = this.testMethod.annotNotPresent(RequestParam.class).arg(Map.class); assertFalse(this.resolver.supportsParameter(param)); try { param = this.testMethod.annot(requestParam()).arg(Mono.class, Map.class); this.resolver.supportsParameter(param); fail(); } catch (IllegalStateException ex) { assertTrue("Unexpected error message:\n" + ex.getMessage(), ex.getMessage().startsWith( "RequestParamMapMethodArgumentResolver doesn't support reactive type wrapper")); } }
protected List<SyncHandlerMethodArgumentResolver> getDefaultInitBinderArgumentResolvers() { List<SyncHandlerMethodArgumentResolver> resolvers = new ArrayList<>(); // Annotation-based argument resolution resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(), false)); resolvers.add(new RequestParamMapMethodArgumentResolver()); resolvers.add(new PathVariableMethodArgumentResolver(getBeanFactory())); resolvers.add(new PathVariableMapMethodArgumentResolver()); resolvers.add(new RequestHeaderMethodArgumentResolver(getBeanFactory())); resolvers.add(new RequestHeaderMapMethodArgumentResolver()); resolvers.add(new CookieValueMethodArgumentResolver(getBeanFactory())); resolvers.add(new ExpressionValueMethodArgumentResolver(getBeanFactory())); resolvers.add(new RequestAttributeMethodArgumentResolver(getBeanFactory())); // Type-based argument resolution resolvers.add(new ModelArgumentResolver()); resolvers.add(new ServerWebExchangeArgumentResolver()); // Custom resolvers if (getCustomInitBinderArgumentResolvers() != null) { resolvers.addAll(getCustomInitBinderArgumentResolvers()); } // Catch-all resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(), true)); return resolvers; }
resolvers.add(new RequestParamMapMethodArgumentResolver()); resolvers.add(new PathVariableMethodArgumentResolver(getBeanFactory())); resolvers.add(new PathVariableMapMethodArgumentResolver());