result.add(new RequestHeaderMapMethodArgumentResolver(reactiveRegistry)); result.add(new CookieValueMethodArgumentResolver(beanFactory, reactiveRegistry)); result.add(new ExpressionValueMethodArgumentResolver(beanFactory, reactiveRegistry));
@Override public boolean supportsParameter(MethodParameter param) { return checkAnnotatedParamNoReactiveWrapper(param, RequestHeader.class, this::allParams); }
@Test public void supportsParameter() { assertTrue("Map parameter not supported", resolver.supportsParameter(paramMap)); assertTrue("MultiValueMap parameter not supported", resolver.supportsParameter(paramMultiValueMap)); assertTrue("HttpHeaders parameter not supported", resolver.supportsParameter(paramHttpHeaders)); assertFalse("non-@RequestParam map supported", resolver.supportsParameter(paramUnsupported)); try { this.resolver.supportsParameter(this.paramAlsoUnsupported); fail(); } catch (IllegalStateException ex) { assertTrue("Unexpected error message:\n" + ex.getMessage(), ex.getMessage().startsWith( "RequestHeaderMapMethodArgumentResolver doesn't support reactive type wrapper")); } }
@Test public void resolveHttpHeadersArgument() throws Exception { String name = "foo"; String value1 = "bar"; String value2 = "baz"; MockServerHttpRequest request = MockServerHttpRequest.get("/").header(name, value1, value2).build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); HttpHeaders expected = new HttpHeaders(); expected.add(name, value1); expected.add(name, value2); Mono<Object> mono = resolver.resolveArgument(paramHttpHeaders, null, exchange); Object result = mono.block(); assertTrue(result instanceof HttpHeaders); assertEquals("Invalid result", expected, result); }
@Override public Optional<Object> resolveArgumentValue(MethodParameter parameter, BindingContext context, ServerWebExchange exchange) { HttpHeaders headers = exchange.getRequest().getHeaders(); Object value = (isMultiValueMap(parameter) ? headers : headers.toSingleValueMap()); return Optional.of(value); }
@Test public void resolveMultiValueMapArgument() throws Exception { String name = "foo"; String value1 = "bar"; String value2 = "baz"; MockServerHttpRequest request = MockServerHttpRequest.get("/").header(name, value1, value2).build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); MultiValueMap<String, String> expected = new LinkedMultiValueMap<>(1); expected.add(name, value1); expected.add(name, value2); Mono<Object> mono = resolver.resolveArgument(paramMultiValueMap, null, exchange); Object result = mono.block(); assertTrue(result instanceof MultiValueMap); assertEquals("Invalid result", expected, result); }
@Before public void setup() throws Exception { resolver = new RequestHeaderMapMethodArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); Method method = ReflectionUtils.findMethod(getClass(), "params", (Class<?>[]) null); paramMap = new SynthesizingMethodParameter(method, 0); paramMultiValueMap = new SynthesizingMethodParameter(method, 1); paramHttpHeaders = new SynthesizingMethodParameter(method, 2); paramUnsupported = new SynthesizingMethodParameter(method, 3); paramUnsupported = new SynthesizingMethodParameter(method, 3); paramAlsoUnsupported = new SynthesizingMethodParameter(method, 4); }
@Test public void resolveMapArgument() throws Exception { String name = "foo"; String value = "bar"; Map<String, String> expected = Collections.singletonMap(name, value); MockServerHttpRequest request = MockServerHttpRequest.get("/").header(name, value).build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); Mono<Object> mono = resolver.resolveArgument(paramMap, null, exchange); Object result = mono.block(); assertTrue(result instanceof Map); assertEquals("Invalid result", expected, result); }
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 ModelAttributeMethodArgumentResolver(getReactiveAdapterRegistry())); resolvers.add(new RequestHeaderMethodArgumentResolver(getBeanFactory())); resolvers.add(new RequestHeaderMapMethodArgumentResolver()); resolvers.add(new CookieValueMethodArgumentResolver(getBeanFactory())); resolvers.add(new ExpressionValueMethodArgumentResolver(getBeanFactory()));