Skip to content

Fails to deserialize (@QueryParam Map) #46816

@mocenas

Description

@mocenas

Describe the bug

After #45233 quarkus fails to deserialize rest endpoints with map param like: (@QueryParam("param") Map<String, String> params)
(Example from testsuite - https://github.com/quarkus-qe/quarkus-test-suite/blob/main/http/rest-client-reactive/src/main/java/io/quarkus/ts/http/restclient/reactive/resources/PlainBookResource.java#L54)

Accessing this endpoint with string: {"id":"Hagakure","author":"Tsuramoto"} Fails with:

...
Caused by: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.LinkedHashMap<java.lang.String,java.lang.String>` from Array value (token `JsonToken.START_ARRAY`)
11:19:03,792 INFO  [app]  at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 1]
11:19:03,792 INFO  [app] 	at io.quarkus.ts.http.restclient.reactive.json.JsonParamConverterProvider$JsonParamConverter.fromString(JsonParamConverterProvider.java:82)
11:19:03,792 INFO  [app] 	at org.jboss.resteasy.reactive.server.core.parameters.converters.RuntimeResolvedConverter.convert(RuntimeResolvedConverter.java:24)
11:19:03,792 INFO  [app] 	at org.jboss.resteasy.reactive.server.handlers.ParameterHandler.handleResult(ParameterHandler.java:108)
11:19:03,792 INFO  [app] 	... 69 more
11:19:03,792 INFO  [app] Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.LinkedHashMap<java.lang.String,java.lang.String>` from Array value (token `JsonToken.START_ARRAY`)
11:19:03,792 INFO  [app]  at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 1]
11:19:03,792 INFO  [app] 	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
11:19:03,792 INFO  [app] 	at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1767)
11:19:03,792 INFO  [app] 	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1541)
11:19:03,792 INFO  [app] 	at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromArray(StdDeserializer.java:222)
11:19:03,792 INFO  [app] 	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:457)
11:19:03,792 INFO  [app] 	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:32)
11:19:03,792 INFO  [app] 	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
11:19:03,792 INFO  [app] 	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4917)
11:19:03,792 INFO  [app] 	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3860)
11:19:03,792 INFO  [app] 	at io.quarkus.ts.http.restclient.reactive.json.JsonParamConverterProvider$JsonParamConverter.fromString(JsonParamConverterProvider.java:79)
11:19:03,792 INFO  [app] 	... 71 more

This used to work before without problems.

When I change the method to explicitly use either HashMap or LinkedHashMap it works without problem (IDK why it works with LinkedHashMap, but cannot deserialize it to same LinkedHashMap if I specify just 'Map').

Expected behavior

No response

Actual behavior

No response

How to Reproduce?

No response

Output of uname -a or ver

No response

Output of java -version

No response

Quarkus version or git rev

999-SNAPSHOT

Build tool (ie. output of mvnw --version or gradlew --version)

No response

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions