package Ġio . tm io . kv Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . Spring Application Ċ import Ġorg . springframework . boot . autoconfigure . SpringBoot Application Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġjava . util .* ĊĊ Ċ @ RestController Ċ class ĠRest API Ġ{ ĊĊĠĠĠ Ġval Ġom Ġ= ĠObjectMapper () ĊĊĠĠĠ Ġval Ġstore Ġ= ĠHashMap < String , Any >() ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġindex Ġ: ĠIndex ĊĊĠĠĠ Ġ@ RequestMapping ("/ rest / kv /{ id }", Ġmethod Ġ= ĠarrayOf ( Request Method . GET )) ĊĠĠĠ Ġfun Ġget (@ PathVariable (" id ") Ġid : ĠString ) Ġ: ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping ("/ rest / kv /{ id }", Ġmethod Ġ= ĠarrayOf ( Request Method . PUT )) ĊĠĠĠ Ġfun Ġput (@ PathVariable (" id ") Ġid : ĠString , Ġ@ RequestBody Ġjson Ġ: ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġom . read Tree ( json ) ĊĠĠĠĠĠĠĠ Ġstore . put ( id , Ġnode ) ĊĠĠĠĠĠĠĠ Ġindex . index ( id , Ġnode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping ("/ rest / kv /{ id }", Ġmethod Ġ= ĠarrayOf ( Request Method . DELETE )) ĊĠĠĠ Ġfun Ġdelete (@ PathVariable (" id ") Ġid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstore . remove ( id ) ĊĠĠĠĠĠĠĠ Ġindex . remove ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping ("/ rest / search ", Ġmethod Ġ= ĠarrayOf ( Request Method . GET )) ĊĠĠĠ Ġfun Ġsearch (@ RequestParam (" q ") Ġq : ĠString ) Ġ: ĠList < Any ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġindex . search ( q ). map Ġ{ Ġid Ġ-> Ġstore . get ( id ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ SpringBoot Application Ċ open Ġclass ĠApplication Ġ{ Ċ Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ ĠSpring Application . run ( Application :: class . java , Ġ* args ) Ċ }