Skip to content

Redirection to UI broken with query-config-enabled when any other boolean parameter is defined #1621

Closed
@piotrp

Description

@piotrp

Describe the bug

  • enabling query-config-enabled when any other boolean parameter of SwaggerUiConfigProperties is set breaks redirection to UI

To Reproduce
With springdoc-openapi 1.6.7 and:

springdoc:
  swagger-ui:
    path: /api/
    show-extensions: true
    query-config-enabled: true

go to /api/ URL. SpringDoc will throw an exception:

Caused by: java.lang.ClassCastException: class java.lang.Boolean cannot be cast to class java.lang.String (java.lang.Boolean and java.lang.String are in module java.base of loader 'bootstrap')
	at org.springdoc.ui.AbstractSwaggerWelcome.lambda$getUriComponentsBuilder$6(AbstractSwaggerWelcome.java:163)
        ...
	at java.base/java.util.TreeMap$EntrySpliterator.forEachRemaining(TreeMap.java:3287)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at org.springdoc.ui.AbstractSwaggerWelcome.getUriComponentsBuilder(AbstractSwaggerWelcome.java:164)
	at org.springdoc.webmvc.ui.SwaggerWelcomeCommon.redirectToUi(SwaggerWelcomeCommon.java:43)
	at org.springdoc.webmvc.ui.SwaggerWelcomeWebMvc.redirectToUi(SwaggerWelcomeWebMvc.java:88)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	... 103 common frames omitted

Additional context

Looks like this is caused by treating all entries returned by swaggerUiConfigParameters.getConfigParameters() as Strings at line 163:

swaggerUiConfigParameters.getConfigParameters().entrySet().stream()
.filter(entry -> !SwaggerUiConfigParameters.CONFIG_URL_PROPERTY.equals(entry.getKey()))
.filter(entry -> !SwaggerUiConfigParameters.OAUTH2_REDIRECT_URL_PROPERTY.equals(entry.getKey()))
.filter(entry -> !SwaggerUiConfigParameters.URL_PROPERTY.equals(entry.getKey()))
.filter(entry -> !entry.getKey().startsWith(SwaggerUiConfigParameters.URLS_PROPERTY))
.filter(entry -> StringUtils.isNotEmpty((String) entry.getValue()))
.forEach(entry -> uriBuilder.queryParam(entry.getKey(), entry.getValue()));

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions