Handling Null in Request DTO
About
Spring์ ์ปจํธ๋กค๋ฌ์์ @RequestBody
์ด๋
ธํ
์ด์
์ ์ด์ฉํ๋ฉด HTTP body์ ์๋ JSON ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํด ๋ฐ์์ฌ ์ ์๋ค. JSON์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๊ผญ ํ์ํ์ง ์์์ ์ค์ง ์์ผ๋ฉด ๋ฌด์ํ๋ ๊ฒฝ์ฐ๋ ์์ง๋ง, ์ ๋ถ ํ์ํ ์๋ ์๋ค.
Java
Java์์๋ null checking์ ์ธ์ด ์ฐจ์์์ ์ง์ํ๊ณ ์์ง๋ ์๋ค. ํ์ง๋ง Validation์ ์ด๋ ธํ ์ด์ ์ ํตํด ๊ฒ์ฆํ ์ ์๋ค.
@NotNull
์ด๋
ธํ
์ด์
์ผ๋ก age
๊ฐ null
์ด๋ฉด ์ค๋ฅ๋ฅผ ๋ฐํํ๋ค.
Kotlin
์ฝํ๋ฆฐ์์๋ nullable ํ์ ๊ณผ non-nullable ํ์ ์ ๊ตฌ๋ถํ์ฌ null safeํ๊ฒ ๊ฐ๋ฐํ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฝ๊ฐ์ ์ฃผ์๊ฐ ํ์ํ๋ค.
์ผ๋จ ์์ ์ฝ๋๋ฅผ ์ฝํ๋ฆฐ์ผ๋ก ๋ฐ๋ก ๋ฐ๊พธ๋ฉด ์ด๋ ๊ฒ ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ์์ ํด์ผ ํ๋ค.
์ฝํ๋ฆฐ์ nullable๊ณผ non-nullable ํ์ ์ ํ์ ๋ค์
?
๋ฅผ ๋ถ์ด๋ ๊ฒ์ผ๋ก ๊ตฌ๋ถํ๋ค. ๋ฐ๋ผ์age
๋ ์ ์ด์null
์ด ๋ ์ ์๋ค.์ด๋ ๊ฒ ์์ฑํ์ ๋ age๊ฐ null๋ก ๋ค์ด์ค๊ฒ ๋๋ค๋ฉด,
@field:NotNull
์ด๋ ธํ ์ด์ ์ ํตํด validation ๋ก์ง์ด ์คํ๋๊ธฐ ์ ์ ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ ๊ณผ์ ๋ถํฐ ์์ธ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์ ์ด ์ด๋ ธํ ์ด์ ์ ์๋ฏธ๊ฐ ์๋ค.์๋
@NotNull
์ด ๋ถ์ด์์ง ์์๋imageUrl
์ nullable ํ์ ์ด ๋์ด์ผ๊ฒ ๋ค.
์์ ์ฌํญ์ ๋ฐ์ํ ๋ ์ด๋ ๊ฒ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๋ค๋ง ํด๋น DTO๋ฅผ ์ปจํธ๋กค๋ฌ์์ ๋ฐ์์ ์ฌ์ฉํ๊ฒ ๋ ํ
๋ฐ, age
๋ ์ค์ ๋ก null์ด ์๋์๋ ๋ถ๊ตฌํ๊ณ age
๋ค์ ?
๋ฅผ ๋ถ์ด๋ ๋ฑ null checking์ ์งํํด์ผ ํ๋ค. ๋ถํธํ๊ธฐ๋ ํ๊ณ , ๊น๋ํ์ง๋ ์๋ค.
Solution
๋ด ์๊ฐ์ ์ด ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ๊น๋ํ ๊ฒ ๊ฐ๋ค. ๋ค์๊ณผ ๊ฐ์ด ์งํํ์.
null๋ก ๋ฐ์๋ ๋๋ ํ๋๋ ๋จ์ํ
?
๋ฅผ ๋ถ์ธ๋ค. ์๋๋ฉด ๋ถ์ด์ง ๋ง.HttpMessageNotReadableException
์ exception handler์์ ์ก๊ณ , ํ์ํ๋ค๋ฉด ์ถ๊ฐ ์์ ์ ํตํดMissingKotlinParameterException
์ ๋ด๋ถ์ ์ผ๋ก ํ์ ์ ์ฒดํฌํด ๋ฉ์์ง๋ฅผ ๋ฐํํ๋ค.
REF
Yoon Sung's Blog - Kotlin + Spring ์์ Dto์ null ์์ฒญ์ ๋ฐ์์๋ ์ฒ๋ฆฌํ๊ธฐ
ํด๋น ์ด์์ ๊ด๋ จํ์ฌ ์์ธํ๊ฒ ์ ํ์๋ค. ๋ชจ๋ ๋ด์ฉ์ ์ด ๊ธ์ ์ฐธ๊ณ ํ๋ค.
Last updated
Was this helpful?