๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/Spring ์ด ์ •๋„๋Š” ํ•ด์ค˜์•ผ์ง€

Jackson SnakeCase / CamelCase ํ•œ๋ฒˆ์— ๋ณ€๊ฒฝ ํ•˜๊ธฐ

by YangsDev 2021. 10. 20.

์‹œ์ž‘ํ•˜๋ฉฐ

์˜ค๋Š˜๋„ ์ด์•ผ๊ธฐ๋ฅผ ์‹œ์ž‘ ํ•ด๋ด…์‹œ๋‹ค 

์˜ค๋Š˜์€ ํŠน์ • GW์—์„œ๋Š” ์นด๋ฉœ ์ผ€์ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค๋กœ ์‘๋‹ต์„ ์ค˜์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ฒผ๋‹ค.

๊ฐœ๋ฐœ์ž๋“ค์€ ์ „ํ†ต์ ์œผ๋กœ ๋ฐ˜๋ณต ์ž‘์—…์„ ์‹ซ์–ดํ•˜๊ณ  key๋ฅผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  key ๋งˆ๋‹ค, @JsonProperty ๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ์—”... ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค.

์–ด๋…ธํ…Œ์ด์…˜ ํ•˜๋‚˜๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ณ€๊ฒฝ์„ ํ•ด๋ณด์ž.

 

@JsonProperty ๋ฉˆ์ถฐ!

ํ•ด๋‹น Task๋ฅผ ๋‹ค๋ฅธ ๋ถ„์—๊ฒŒ ๋ถ€ํƒ์„ ํ–ˆ๋”๋‹ˆ Response ๊ฐ์ฒด์˜ Data Class์— @JsonProperty๋กœ ๋–ก์น ์„ ํ•ด๋‘์—ˆ๋‹ค.

๋ฌผ๋ก  ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๊ฐœ๋ฐœ์— ๋ฌธ์ œ๊ฐ€ ์—†๊ณ  ๋™์ž‘์—๋„ ๋ฌธ์ œ๋Š” ์—†๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ , ์†”์งํžˆ ๊ท€์ฐฎ๋‹ค.

 

JsonProperty ๋ฉˆ์ถฐ!!

 

@JsonNaming์„ ์จ๋ณด์ž

์–ด๋…ธํ…Œ์ด์…˜ ํ•˜๋‚˜๋กœ ์†์‰ฝ๊ฒŒ, ์Šค๋„ค์ดํฌ์ผ€์ด์Šค์™€ ์นด๋ฉœ์ผ€์ด์Šค๋ฅผ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์˜ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

        @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
        data class Me(
            val id: Long,
            val userId: Long,
            val issueDate: LocalDateTime,
        )

์š”๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ง  ํ•˜๊ณ  ์ž‘์„ฑ ํ•ด์ค€๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์ง  ํ•˜๊ณ  JSON์ด ์ƒ์„ฑ ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

{
  "id" : 1,
  "user_id": 2,
  "issue_date" : "2021-02-02"
}

 

์ฐธ์‰ฝ์ฃ ?

๋งˆ์น˜๋ฉฐ

์˜ˆ์ „์—๋Š” ๋‚˜๋„ ์ด @JsonNaming ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ชจ๋ฅด๊ธฐ๋„ ํ–ˆ๊ณ  Jackson์„ ์“ด์ง€ ์–ผ๋งˆ ์•ˆ๋˜๊ธฐ๋„ ํ•ด์„œ @JsonProperty / Gson์˜ @SerializedName ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ 1,2๊ฐœ์˜ key์ผ๋•Œ๋Š” ๊ดœ์ฐฎ์ง€๋งŒ 20๊ฐœ 30๊ฐœ๊ฐ€ ๋˜๋Š” ์ˆœ๊ฐ„ ๋‚˜๋ฝ์ด ์—ด๋ฆฌ๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ ์  ํž˜๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ํŽธํ•˜๊ฒŒ ์œ ์ง€ ๋ณด์ˆ˜ ํ•˜๋ฉด ์ข‹์„๋“ฏํ•˜๋‹ค. (์–ด๋…ธํ…Œ์ด์…˜ ์ง€์˜ฅ์ธ๊ฒƒ๊ฐ™๊ธดํ•˜์ง€๋งŒ ์•”ํŠผ...)

๋Œ“๊ธ€