๐[Spring] Controller์์ getter๊ฐ ์๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด JSON์ด ๋๋ค?!
-
Controller์์ getter๊ฐ ์๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก JSON์ผ๋ก ๋ณํ๋์ด ํด๋ผ์ด์ธํธ์ ์ ๋ฌ๋ฉ๋๋ค.
- ์ด ๋์์ Spring Framework์์ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ค๋๋ค.
1๏ธโฃ Spring์์ ๊ฐ์ฒด๊ฐ JSON์ผ๋ก ๋ณํ๋๋ ๊ณผ์ .
1. ๊ฐ์ฒด ๋ฐํ ๋ฐ @RestController
- Spring์์๋
@RestController
๋๋@ResponseBody
์ ๋ํ ์ด์ ์ด ๋ถ์ ๋ฉ์๋๊ฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด, ํด๋น ๊ฐ์ฒด๋ ์๋์ผ๋ก JSON ํ์์ผ๋ก ๋ณํ๋์ด ํด๋ผ์ด์ธํธ์ ์ ๋ฌ๋ฉ๋๋ค. - Spring์ ๋ด๋ถ์ ์ผ๋ก Jackson์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ Java ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ์ง๋ ฌํํฉ๋๋ค.
- ์ด ๊ณผ์ ์์ ๊ฐ์ฒด์ getter ๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ค JSON์ ์์ฑํฉ๋๋ค.
2. Jackson์ ์ํ ์ง๋ ฌํ.
- Spring Boot๋ Jackson์ ๊ธฐ๋ณธ์ผ๋ก ํฌํจํ๊ณ ์์ด, ์ถ๊ฐ์ ์ธ ์ค์ ์์ด Java ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค.
- ๊ฐ์ฒด์ getter ๋ฉ์๋๋ฅผ ํตํด ๊ฐ์ฒด ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ , ์ด๋ฅผ JSON์ผ๋ก ๋ณํํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด,
getName()
์ด๋ผ๋ getter๊ฐ ์์ผ๋ฉด, ์ด๋name
์ด๋ผ๋ ํ๋๋ก JSON์ ํฌํจ๋ฉ๋๋ค.
2๏ธโฃ ์์.
1. ๊ฐ์ฒด ํด๋์ค.
public class User {
private Long id;
private String name;
private String email;
// ๊ธฐ๋ณธ ์์ฑ์
public User() {}
// Getter์ Setter
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
2. Controller ํด๋์ค.
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
// User ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฐํ (์ผ๋ฐ์ ์ผ๋ก๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์ด)
User user = new User();
user.setId(id);
user.setName("Kobe");
user.setEmail("kobe@example.com");
// ์ด ๊ฐ์ฒด๋ ์๋์ผ๋ก JSON ํ์์ผ๋ก ๋ณํ๋์ด ํด๋ผ์ด์ธํธ์ ๋ฐํ๋จ.
return user;
}
}
3๏ธโฃ ๋์ ์๋ฆฌ.
1. ํด๋ผ์ด์ธํธ ์์ฒญ.
- ํด๋ผ์ด์ธํธ
/users/1
๊ณผ ๊ฐ์ด ์์ฒญ์ ๋ณด๋ด๋ฉด, Spring์ ํด๋น ๊ฒฝ๋ก์ ๋งคํ๋getUserById
๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
2. Java ๊ฐ์ฒด ๋ฐํ.
- ์ด ๋ฉ์๋๋
User
๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
3. ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํ.
- Spring์
@RestController
๋๋@ResponseBody
๋ฅผ ๋ณด๊ณ ,User
๊ฐ์ฒด๋ฅผ JSON ํ์์ผ๋ก ๋ณํํฉ๋๋ค. - ์ด๋ Jackson ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ getter ๋ฉ์๋๋ค์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ์ ์ถ์ถํ๊ณ , ์ด๋ฅผ JSON์ผ๋ก ์ง๋ ฌํํฉ๋๋ค.
๐โโ๏ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ์ฐจ์ด์
4. ํด๋ผ์ด์ธํธ์ JSON ์๋ต.
- ์ง๋ ฌํ๋ JSON ๋ฐ์ดํฐ๊ฐ ํด๋ผ์ด์ธํธ์ ์๋ต์ผ๋ก ์ ์ก๋ฉ๋๋ค.
๊ฒฐ๊ณผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ๋ JSON
{
"id": 1,
"name": "Kobe",
"email": "kobe@example.com"
}
4๏ธโฃ ์ฃผ์ ์ฌํญ.
-
๊ฐ์ฒด์ getter๊ฐ ์์ด์ผ ํจ.
- Jackson์ ๊ฐ์ฒด์ ํ๋๋ฅผ ์ง์ ์ ๊ทผํ๋ ๊ฒ์ด ์๋๋ผ, ๊ธฐ๋ณธ์ ์ผ๋ก getter ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํฉ๋๋ค.
- ๋ฐ๋ผ์ getter ๋ฉ์๋๊ฐ ์กด์ฌํด์ผ ํฉ๋๋ค.
-
๊ฐ์ฒด๊ฐ null์ธ ๊ฒฝ์ฐ.
- ๊ฐ์ฒด๊ฐ null์ด๊ฑฐ๋, ํน์ ํ๋๊ฐ null์ธ ๊ฒฝ์ฐ ๊ทธ ํ๋๋ JSON์ ํฌํจ๋์ง ์๊ฑฐ๋ null๋ก ํํ๋ฉ๋๋ค.
-
์ถ๊ฐ ์ค์ .
- ํ์์ ๋ฐ๋ผ Jackson์ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ๋ฐฉ์์ ์ปค์คํฐ๋ง์ด์งํ ์ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, ํ๋ ์ด๋ฆ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ํน์ ํ๋๋ฅผ ์ ์ธํ๊ณ ์ถ์ ๋๋
@JsonProperty
,@JsonIgnore
๊ฐ์ Jackson ์ ๋ํ ์ด์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
5๏ธโฃ ์์ฝ.
- Java ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ณ์ธตํ ์ํคํ ์ฒ๋ก ๊ตฌํํ ํ Controller์์ getter๊ฐ ์๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด, Spring์ ํด๋น ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก JSON ํ์์ผ๋ก ๋ณํํ์ฌ ํด๋ผ์ด์ธํธ์ ์๋ตํฉ๋๋ค.
- ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก Spring์ Jackson ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ฉฐ, ์ถ๊ฐ์ ์ธ ์ค์ ์์ด๋ ๊ฐ์ฒด์ getter๋ฅผ ํตํด JSON์ผ๋ก ์ง๋ ฌํ๋ฉ๋๋ค.