@Override public boolean supportsParameter(MethodParameter parameter) { return checkParameterType(parameter, Principal.class::isAssignableFrom); }
result.add(new PrincipalArgumentResolver(reactiveRegistry)); if (requestMappingMethod) { result.add(new SessionStatusMethodArgumentResolver());
@Override public Mono<Object> resolveArgument( MethodParameter parameter, BindingContext context, ServerWebExchange exchange) { Mono<Principal> principal = exchange.getPrincipal(); ReactiveAdapter adapter = getAdapterRegistry().getAdapter(parameter.getParameterType()); return (adapter != null ? Mono.just(adapter.fromPublisher(principal)) : Mono.from(principal)); }
@Test public void supportsParameter() throws Exception { assertTrue(this.resolver.supportsParameter(this.testMethod.arg(Principal.class))); assertTrue(this.resolver.supportsParameter(this.testMethod.arg(Mono.class, Principal.class))); assertTrue(this.resolver.supportsParameter(this.testMethod.arg(Single.class, Principal.class))); }
@Test public void resolverArgument() throws Exception { BindingContext context = new BindingContext(); Principal user = () -> "Joe"; ServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/")) .mutate().principal(Mono.just(user)).build(); MethodParameter param = this.testMethod.arg(Principal.class); Object actual = this.resolver.resolveArgument(param, context, exchange).block(); assertSame(user, actual); param = this.testMethod.arg(Mono.class, Principal.class); actual = this.resolver.resolveArgument(param, context, exchange).block(); assertTrue(Mono.class.isAssignableFrom(actual.getClass())); assertSame(user, ((Mono<?>) actual).block()); param = this.testMethod.arg(Single.class, Principal.class); actual = this.resolver.resolveArgument(param, context, exchange).block(); assertTrue(Single.class.isAssignableFrom(actual.getClass())); assertSame(user, ((Single<?>) actual).blockingGet()); }
resolvers.add(new ErrorsMethodArgumentResolver(getReactiveAdapterRegistry())); resolvers.add(new ServerWebExchangeArgumentResolver()); resolvers.add(new PrincipalArgumentResolver()); resolvers.add(new WebSessionArgumentResolver());