간혹 클라이언트로부터 데이터를 전달 받을 때, 연-월-일
이 아닌 연-월
로만 데이터를 받아야 할 상황이 생길 수 있다.
이럴 때 YearMonth
객체를 사용하면 된다.
Request DTO 는 다음과 같이 생겼다.
data class ExampleSaveRequestDto(
val yearMonth: YearMonth
)
컨트롤러는 매우 단순하게 구성했다. DTO 를 Request Body 로 전달받아 DTO 내의 yearMonth
프로퍼티를 출력한다.
@Slf4j
@RestController
@RequestMapping("/example")
class ExampleController(
private val exampleService: ExampleService
) {
@PostMapping("")
fun createExample(@RequestBody requestDto: ExampleSaveRequestDto): ResponseEntity<ExampleResponseDto> {
// DTO 의 프로퍼티 출력
println("전달받은 값은 ${requestDto.yearMonth} 입니다.")
return ResponseEntity(null, HttpStatus.OK)
}
}
바로 테스트해본다.
아주 잘 나온다.
번외이지만, 만일 요청 시 2022-07
과 같은 데이터가 아니라 2022/07
처럼 포매팅을 다르게 해서 전달받고 싶다면 다음과 같이 @JsonFormat()
어노테이션을 적용해주면 된다.
data class ExampleSaveRequestDto(
@JsonFormat(pattern = "yyyy/MM")
val yearMonth: YearMonth
)
이렇게 해주면 Jackson 이 DTO 에 잘 역직렬화를 수행해준다.
잘 된다.
끗.