Spring BootでJSONでのリクエストを受け取れるようにしたい
やり方は以下で、
@PostMapping(path = "/save", consumes = MediaType.APPLICATION_JSON_VALUE) HttpStatus save(@RequestBody RequestDto dto) {
@PostMapping("/save")
としていたところを、上記のように変更するだけ
JSONからDTOのコンバートをカスタマイズしたい場合
例えば、JSONのキーがスネークケース(snake_case)だった場合、RequestDtoのプロパティ名をスネークケースにしなければ受け取れない
ただ、システム側ではキャメルケース(camelCase)に統一したいのでこれをやりたくない
この変換部分の責務はJSONからDTOコンバートする部分でうまく閉じ込めたい
そこで、JSONからDTOコンバートをJacksonのObjectMapperを使うようにする
以下のように文字列で受け取ったらObjectMapperでDTOにコンバートするようにする
@PostMapping("/save") HttpStatus save(@RequestBody String jsonString) { RequestDto dto = translate(jsonString))); } private RequestDto translate(String jsonString) { try { return mapper.readValue(jsonString, RequestDto.class); } catch (IOException e) { throw new UncheckedIOException(e); } }
これで、何かコンバート部分でカスタマイズしたい場合はObjectMapperのカスタマイザーでカスタマイズすることができるようになる