2

I am working on a project using spring webflux. I have to add custom annotations on query params in controller and have some logic on them , came into HandlerMethodArgumentResolver. However i haven't been able to get it to work

object RequestParamsResolver : HandlerMethodArgumentResolver {
    override fun supportsParameter(parameter: MethodParameter): Boolean {
        println("....check parameter support")
        return parameter.getParameterAnnotation(Control::class.java) != null
    }

    override fun resolveArgument(
        parameter: MethodParameter,
        bindingContext: BindingContext,
        exchange: ServerWebExchange
    ): Mono<Any> {
        println("....resolve argument called")
        val annotation = parameter.getParameterAnnotation(Control::class.java)
        return Mono.empty()
    }

}
@Configuration
class WebConfig : WebFluxConfigurer {

    override fun configureArgumentResolvers(configurer: ArgumentResolverConfigurer) {
        println("...adding custom resolver")
        configurer.addCustomResolver(RequestParamsResolver)
        super.configureArgumentResolvers(configurer)
    }
}

My configureArgumentResolvers is being executed, but none of the methods in RequestParamsResolver is being called. Am i missing something? Will appreciate any help. TIA

I have looked into the similar question, but it didn't work. Spring HandlerMethodArgumentResolver not executing

matrixguy
  • 286
  • 1
  • 6
  • 30

1 Answers1

0

For WebFlux you need to use HandlerMethodArgumentResolverSupport, not HandlerMethodArgumentResolver.

Also if you are using Spring Boot, you don't need to implement WebFluxConfigurer, just add ArgumentResolver classes to context with @Bean or @Component.