๋ฐ์ํ
ํ๋ง๋๋ก
์๋ฒ -> ํด๋ผ์ด์ธํธ ๋ก ์๋ตํ ๋
์๋ต์ ๋ด์์ ๋ณด๋ด๋ ์์
โ
๊ทผ๋ฐ ์๋ต์ผ๋ก ๋ญ ๋ด๋๋ฉด,
โ
๋ฐ์ดํฐ, ์ํ์ฝ๋, ํค๋ ์ด๋ฐ๊ฑธ ๋ฃ์ด์ ๋ณด๋
return ResponseEntity.status(HttpStatus.CREATED).body("ํ์๊ฐ์
์ฑ๊ณต!");

๋ํ์ ์ผ๋ก ์ด์ ๋ ์์
์ด๋ ๊ฒ ๋๋ฉด ๋ฌธ์ ์ ์ด ์๊น
์ฝ๋๋ฅผ ์ง๋ ์ฌ๋๋ง๋ค ์๋ต์ด ๋ฌ๋ผ์ง ์ ์์.
๋ฐ๋ผ์ ๋ณดํต GlobalResponse๋ก ์๋ตํ์ ํต์ผํด์ ํ๋ก ํธํํ ๋์ ธ์ค
โ
๊ทธ๋ผ ํ๋ก ํธ๋ ํ์ ํ ๋ ํ๋ก ํธ๊ฐ ์ข ๋ ํธํ๊ฒ ์์ ๊ฐ๋ฅ
โ
โ
GlabalResponse๋ ๋ณดํต ์๋์๊ฐ์ด ๊ตฌ์ฑ๋จ
public class GlobalResponse<T> {
private int code; // ์ํ ์ฝ๋
private String message; // ๋ฉ์์ง
private T data; // ์ค์ ์๋ต ๋ฐ์ดํฐ
// ์์ฑ์ + static factory method ์์ฃผ ์
public static <T> GlobalResponse<T> of(int code, String message, T data) {
GlobalResponse<T> res = new GlobalResponse<>();
res.code = code;
res.message = message;
res.data = data;
return res;
}
public static <T> GlobalResponse<T> success(T data) {
return of(200, "์ฑ๊ณต", data);
}
public static GlobalResponse<Void> fail(String message) {
return of(400, message, null);
}
}
๋ฐ๋ผ์ GlobalResponse๊น์ง ์จ์ ์ค์ ๋ก ์ด๋ค๋ฉด
@GetMapping("/article/{id}")
public ResponseEntity<GlobalResponse<Article>> getArticle(@PathVariable Long id) {
Article article = articleService.findById(id);
return ResponseEntity.ok(GlobalResponse.success(article));
}
์ด๋ฐ ๋๋์
โ
โ
์ด๋ ๊ฒ ์๋ฒ์์ ๋์ง๋ฉด ํ๋ก ํธ๋ ์ด๋ป๊ฒ ๋ฐ๋๋ฉด
{
"code": 200,
"message": "์ฑ๊ณต",
"data": {
"id": 1,
"title": "hello",
"content": "world"
}
}
์๋ ๊ฒ json์ผ๋ก ๋ฐ์
โ
๋ฐ์ํ
'Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Spring Boot] ํ์๋ฆฌํ ํ ํ๋ฆฟ ์์ง์ด๋?์์กด์ฑ ์ถ๊ฐ (0) | 2025.05.03 |
|---|---|
| [Spring Boot] @PathVariable vs. @RequestParam ๋ญ ์จ์ผํ ๊น? (feat.@QueryParam) (0) | 2025.05.03 |
| [Spring Boot] @RestController ์ธ์ ์๋ ๋ (IntelliJ) (0) | 2025.05.03 |
| [Spring Boot] ์์กด์ฑ ์ฃผ์ ํ ๋ ํ๋์ฃผ์ vs ์์ฑ์ ์ฃผ์ ? (0) | 2025.05.03 |
| [Spring Boot]@RequiredArgsConstructor๋? (0) | 2025.05.03 |