doublemc
doublemc

Reputation: 3301

Feign QueryMap usage with POJO

I've found in FEIGN-README that I can do stuff like:

interface MarketDataRestClient {
    @RequestLine("GET /api/v1/depth")
    fun getOrderBook(@QueryMap orderBookQuery: OrderBookQuery) : OrderBook
}

OrderBookQuery:

data class OrderBookQuery(val symbol: String, val limit: Int? = 100)

And Feign should generate query params: /api/v1/depth?symbol={symbol}&limit={limit}

Unfortunately all I'm getting is:

Exception in thread "main" java.lang.IllegalStateException: QueryMap parameter must be a Map: class OrderBookQuery
at feign.Util.checkState(Util.java:128)
at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:126)
at feign.Contract$BaseContract.parseAndValidatateMetadata(Contract.java:64)
at feign.ReflectiveFeign$ParseHandlersByName.apply(ReflectiveFeign.java:146)
at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:53)
at feign.Feign$Builder.target(Feign.java:198)
at feign.Feign$Builder.target(Feign.java:194)

Upvotes: 1

Views: 3249

Answers (2)

晒太阳的虫虫
晒太阳的虫虫

Reputation: 1

Just add a QueryMapEncoder,like:

return Feign
        .builder()
        .client(new OkHttpClient())
        .logger(new Logger.ErrorLogger()).logLevel(Logger.Level.BASIC)
        .queryMapEncoder(new BeanQueryMapEncoder())
        .encoder(new GsonEncoder())
        .decoder(new GsonDecoder())

Upvotes: 0

Kevin Davis
Kevin Davis

Reputation: 1293

This feature will be available in 9.7. The current published version, as of the writing of this answer, is 9.6. If you do not want to wait, please clone the repository and run build the project.

Upvotes: 2

Related Questions