๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“– Java&Spring

@JsonProperty์™€ @JsonNaming

ํด๋ผ์ด์–ธํŠธ์™€ ์—ฐ๋™ ๊ทœ๊ฒฉ์„ ์ •์˜ํ•˜๋ฉฐ, JSON ํ˜•์‹์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์›๋ž˜ ์‚ฌ์šฉํ•˜๋˜ ์—ฐ๋™ ๋ฐฉ์‹์€ ์นด๋ฉœ ์ผ€์ด์Šค (Camel Case) ๋ฐฉ์‹์ด์—ˆ๋Š”๋ฐ,

์—ฐ๋™์— ์žˆ์–ด ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ์„œ๋น„์Šค๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•ด๋‹ฌ๋ผ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ์–ด์„œ @JsonProperty๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด์—๋Š” REST API ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ @RequestBody๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์—ˆ์–ด์„œ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š”๊ฑด ๋น„ํšจ์œจ์ ์ด์—ˆ๋‹ค ๐Ÿ’ฆ

 

๐Ÿ•’ JSON ๋ช…๋ช… ๊ทœ์น™ 3๊ฐ€์ง€

ํ‘œ์ค€์€ ์•„๋‹ˆ์ง€๋งŒ ์•„๋ž˜์˜ 3๊ฐ€์ง€ ์Šคํƒ€์ผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

  •  Pascal 
  •  camelCase 
  •  snake_case 

๋งŒ์•ฝ ๋‚ด ์ด๋ฆ„์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋„ค์ด๋ฐ์„ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด

// Pascal
MyName
// camelCase
myName
// snake_case
my_name

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

์„œ๋ฒ„/ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” JSON ํ˜•์‹์ด ๋‹ค๋ฅด๋‹ค๋ฉด ์ฒ˜๋ฆฌํ•˜๊ณ ์žํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ Key๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

@JsonProperty๋‚˜ @JsonNaming๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Key ๋„ค์ด๋ฐ ํ˜•์‹๋งŒ ๋ฐ”๊ฟ”์ฃผ๋Š”๊ฒŒ ๋งค์šฐ ํšจ์œจ์ ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค

 

์•„๋ž˜์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์˜ค๋Š” JSON body๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•ด๋ด…์‹œ๋‹ค.

{
    "my_name": "name",
    "my_phone": "010-1234-5678"
}


์œ„ ํ˜•์‹์— ๋งž์ถฐ์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ๋ณ€์ˆ˜ ์ƒ์„ฑ ๊ทœ์น™์„ ๊ฐ™๊ฒŒ ํ•ด๋„ ๋˜๊ณ 
@Data
public class JsonExample {
    private String my_name;
    private String my_phone;
}
// @JsonProperty ํ˜•์‹์œผ๋กœ ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค
@Data
public class JsonExample {
    @JsonProperty("my_name") private String myName;
    @JsonProperty("my_phone") private String myPhone;
}
// @JsonNaming์„ ์‚ฌ์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค
@Data
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class JsonExample {
    private String myName;
    private String myPhone;
}

 

์ด ํ”„๋กœํผํ‹ฐ๋Š” ๋ณ€์ˆ˜ ์ผ๋ถ€์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๋‘˜๋‹ค ๊ฐ™์€ ๋„ค์ด๋ฐ ๊ทœ์น™์œผ๋กœ ์˜จ๋‹ค๋ฉด @JsonNaming์œผ๋กœ ํ•ด์ฃผ๋Š”๊ฒŒ ๋” ํŽธํ•  ๋“ฏ ํ•˜์ง€๋งŒ โ—

 

๊ฐ„ํ˜น ์ด๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

{
    "myName": "name",
    "my_phone": "010-1234-5678",
    "MyHome": "์„œ์šธ์‹œ ์–ด๋”˜๊ฐ€"
}

 

์ด๋Ÿด ๋•Œ๋Š” @JsonProperty๋กœ ๋ณ€์ˆ˜๋งˆ๋‹ค ๋„ค์ด๋ฐ์„ ๋งž์ถฐ์„œ ์„ ์–ธํ•ด์ฃผ๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

 

@Data
public class JsonExample {
    @JsonProperty("myName") private String myName;
    @JsonProperty("my_phone") private String myPhone;
    @JsonProperty("MyHome") private String myHome;
}

 

๊ทธ๋Ÿฌ๋ฉด ๋‚ด ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜ ํ˜•์‹์€ ์ผ์ •ํ•œ ํ˜•ํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ‘

์‚ฌ์‹ค ๋‹จ์ˆœํžˆ ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ์‚ฌ์šฉํ•ด์„œ ํ•˜๋ฉด ๋˜๋Š”๊ฑฐ ์•„๋‹˜? ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์”จ์Ÿ์ด๋Š” ๋„ˆ๋ฌด ์‹ฑ๊ธฐ;