しおしお

IntelliJ IDEAのことなんかを書いてます

Spring Bootでjackson-module-kotlinを使う

Jacksonのkotlin対応モジュール をSpring Bootで使ってみる。

バージョンなど

Spring Boot:1.3.5
Jackson:2.6.6

Jacksonのkotlinモジュールを依存に追加

Gradleだとこんな感じですね

compile 'com.fasterxml.jackson.module:jackson-module-kotlin:2.6.6'

Jsonマッピングするクラス

こんな感じのクラスにマッピングする

data class Param(val str:String, val num:Int)

JacksonのKotlinモジュールを有効にする

Developing Spring Boot applications with Kotlinを参考にして追加してあげる。

  @Bean
  open fun objectMapperBuilder(): Jackson2ObjectMapperBuilder
      = Jackson2ObjectMapperBuilder().modulesToInstall(KotlinModule())

コントローラの実装

Jsonマッピングされたdata classを文字列表現で返すだけのシンプルな実装です。

@RestController
@RequestMapping("test")
open class Controller {

  @RequestMapping(consumes = arrayOf(MediaType.APPLICATION_JSON_VALUE), method = arrayOf(RequestMethod.POST))
  @ResponseBody
  fun post(@RequestBody param: Param): String {
    return param.toString()
  }
}

動かしてみると

いい感じに動きました。

curl  -H "Content-Type: application/json" -X POST -d '{"str": "12345", "num": 100}' http://localhost:8080/test
Param(str=12345, num=100)

Spring Boot1.4系になると

Spring Boot1.4系になると、 jackson-module-kotlinを追加してあげるだけでいい感じに動いてくれます。
上の例で書いたような、KotlinModuleの設定がいらなくなる感じです。

この辺の実装が追加されてるからですかね。
spring-framework/Jackson2ObjectMapperBuilder.java at master · spring-projects/spring-framework · GitHub

おわり。