はじめに
Quarkusで外部APIを叩いたあとに返ってきたJsonをバインドするのに困ったのでまとめます
問題
以下のようなAPIを叩くDriverを用意しました
Driver.kt
fun find(request: Map<String, Any?>): TodoJson =
ApiClient.find(
request["id"]?.toString() ?: null,
)
}
interface ApiClient {
@GET
@Path("/v1/todo")
fun getfind(@QueryParam("id") id: String): TodoJson
}
data class TodoJson(val name: String, val done: Boolean)
ここで返却する値はモックサーバーを用意して以下のようにしました
"response": {
"status": 200,
"jsonBody": {
"todo": {
name: "test",
done: true
}
}
}
しかしなぜかバインドがうまくいきませんでした
カラム名や型もただしく謎でした
解決方法
モックサーバーのヘッダーにContent-Type: "application/json"
を入れることで解決できました
これをJacksonでは認識してバインドしてくれているようです
"response": {
"status": 200,
"jsonBody": {
"todo": {
name: "test",
done: true
}
},
"headers": {
"Content-Type": "application/json"
}
}
おわりに
すでに動いていたテストデータを確認して気づくことができました
デバックも難しいので気づけてよかったです