UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Spring Boot】 JSONでのリクエストを受け取れるようにする

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のカスタマイザーでカスタマイズすることができるようになる