2025-04-08T19:56:24
This commit is contained in:
269
docs/_archive/mvc.md
Normal file
269
docs/_archive/mvc.md
Normal file
@@ -0,0 +1,269 @@
|
||||
# Spring Boot MVC 어노테이션 정리
|
||||
|
||||
Spring Boot MVC에서 사용되는 주요 어노테이션을 표로 정리한 후, 각각의 어노테이션에 대한 설명과 예제를 제공합니다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 어노테이션 정리표
|
||||
|
||||
| 어노테이션 | 설명 |
|
||||
|--------------------|-----------------------------------------|
|
||||
| `@Controller` | Spring MVC의 컨트롤러 클래스를 정의 |
|
||||
| `@RestController` | `@Controller` + `@ResponseBody`, JSON 응답을 기본으로 함 |
|
||||
| `@RequestMapping` | URL 요청을 특정 컨트롤러 또는 메서드에 매핑 |
|
||||
| `@GetMapping` | HTTP GET 요청을 특정 메서드에 매핑 |
|
||||
| `@PostMapping` | HTTP POST 요청을 특정 메서드에 매핑 |
|
||||
| `@PutMapping` | HTTP PUT 요청을 특정 메서드에 매핑 |
|
||||
| `@DeleteMapping` | HTTP DELETE 요청을 특정 메서드에 매핑 |
|
||||
| `@PatchMapping` | HTTP PATCH 요청을 특정 메서드에 매핑 |
|
||||
| `@RequestParam` | 요청 파라미터를 메서드의 파라미터로 매핑 |
|
||||
| `@PathVariable` | URL 경로 변수를 메서드의 파라미터로 매핑 |
|
||||
| `@ModelAttribute` | 폼 데이터를 객체로 변환하여 전달 |
|
||||
| `@RequestBody` | 요청 본문(JSON 등)을 객체로 변환하여 전달 |
|
||||
| `@ResponseBody` | 반환 데이터를 JSON 형태로 응답 |
|
||||
| `@ResponseStatus` | HTTP 응답 상태 코드를 지정 |
|
||||
| `@ExceptionHandler` | 특정 예외 발생 시 처리할 메서드를 정의 |
|
||||
| `@InitBinder` | 컨트롤러에서 요청 데이터를 변환하는 바인딩 설정을 정의 |
|
||||
| `@CrossOrigin` | 다른 도메인에서 API 요청을 허용하도록 설정 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 어노테이션 설명 및 예제
|
||||
|
||||
### 1) `@Controller`
|
||||
Spring MVC 컨트롤러 클래스임을 나타냅니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@Controller
|
||||
public class MyController {
|
||||
@GetMapping("/hello")
|
||||
public String hello() {
|
||||
return "hello"; // hello.html을 렌더링
|
||||
}
|
||||
}
|
||||
```
|
||||
- `hello.html` 뷰 페이지를 반환합니다.
|
||||
|
||||
---
|
||||
|
||||
### 2) `@RestController`
|
||||
`@Controller`와 `@ResponseBody`를 합친 역할을 합니다. 즉, JSON 응답을 기본으로 합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@RestController
|
||||
public class MyRestController {
|
||||
@GetMapping("/api/hello")
|
||||
public String hello() {
|
||||
return "Hello, World!";
|
||||
}
|
||||
}
|
||||
```
|
||||
- `"Hello, World!"`라는 문자열을 JSON 형식으로 반환합니다.
|
||||
|
||||
---
|
||||
|
||||
### 3) `@RequestMapping`
|
||||
URL과 컨트롤러 메서드를 매핑합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@Controller
|
||||
@RequestMapping("/users")
|
||||
public class UserController {
|
||||
@GetMapping("/{id}")
|
||||
public String getUser(@PathVariable Long id) {
|
||||
return "user"; // user.html 렌더링
|
||||
}
|
||||
}
|
||||
```
|
||||
- `/users/{id}` 경로로 들어오는 요청을 `getUser` 메서드가 처리합니다.
|
||||
|
||||
---
|
||||
|
||||
### 4) `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, `@PatchMapping`
|
||||
각 HTTP 메서드에 대한 매핑을 제공합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@RestController
|
||||
@RequestMapping("/items")
|
||||
public class ItemController {
|
||||
|
||||
@GetMapping("/{id}")
|
||||
public String getItem(@PathVariable Long id) {
|
||||
return "Item: " + id;
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public String createItem(@RequestBody String item) {
|
||||
return "Created: " + item;
|
||||
}
|
||||
|
||||
@PutMapping("/{id}")
|
||||
public String updateItem(@PathVariable Long id, @RequestBody String item) {
|
||||
return "Updated item " + id + " to " + item;
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
public String deleteItem(@PathVariable Long id) {
|
||||
return "Deleted item " + id;
|
||||
}
|
||||
}
|
||||
```
|
||||
- 각각 `GET`, `POST`, `PUT`, `DELETE` 요청을 처리하는 컨트롤러입니다.
|
||||
|
||||
---
|
||||
|
||||
### 5) `@RequestParam`
|
||||
쿼리 파라미터를 매핑할 때 사용합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@RestController
|
||||
public class ParamController {
|
||||
@GetMapping("/search")
|
||||
public String search(@RequestParam String query) {
|
||||
return "Searching for: " + query;
|
||||
}
|
||||
}
|
||||
```
|
||||
- `/search?query=Spring` 요청 시 `"Searching for: Spring"` 반환.
|
||||
|
||||
---
|
||||
|
||||
### 6) `@PathVariable`
|
||||
URL 경로 변수를 매핑할 때 사용합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@RestController
|
||||
public class PathVariableController {
|
||||
@GetMapping("/product/{id}")
|
||||
public String getProduct(@PathVariable Long id) {
|
||||
return "Product ID: " + id;
|
||||
}
|
||||
}
|
||||
```
|
||||
- `/product/100` 요청 시 `"Product ID: 100"` 반환.
|
||||
|
||||
---
|
||||
|
||||
### 7) `@ModelAttribute`
|
||||
폼 데이터를 객체로 바인딩할 때 사용합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@Controller
|
||||
public class FormController {
|
||||
@PostMapping("/submit")
|
||||
public String submit(@ModelAttribute User user) {
|
||||
return "result"; // result.html 렌더링
|
||||
}
|
||||
}
|
||||
|
||||
class User {
|
||||
private String name;
|
||||
private int age;
|
||||
// Getter & Setter 생략
|
||||
}
|
||||
```
|
||||
- 폼에서 `name`과 `age` 값을 받아 `User` 객체로 변환.
|
||||
|
||||
---
|
||||
|
||||
### 8) `@RequestBody`
|
||||
JSON 데이터를 객체로 변환할 때 사용합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@RestController
|
||||
public class JsonController {
|
||||
@PostMapping("/json")
|
||||
public String receiveJson(@RequestBody User user) {
|
||||
return "Received: " + user.getName();
|
||||
}
|
||||
}
|
||||
```
|
||||
- `{ "name": "Alice", "age": 25 }` 데이터를 `User` 객체로 변환.
|
||||
|
||||
---
|
||||
|
||||
### 9) `@ResponseBody`
|
||||
메서드의 반환값을 HTTP 응답으로 직접 반환할 때 사용합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@Controller
|
||||
public class ResponseController {
|
||||
@ResponseBody
|
||||
@GetMapping("/text")
|
||||
public String textResponse() {
|
||||
return "Hello, ResponseBody!";
|
||||
}
|
||||
}
|
||||
```
|
||||
- `"Hello, ResponseBody!"`가 그대로 반환.
|
||||
|
||||
---
|
||||
|
||||
### 10) `@ResponseStatus`
|
||||
HTTP 응답 상태 코드를 설정할 때 사용합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@RestController
|
||||
public class StatusController {
|
||||
@ResponseStatus(HttpStatus.CREATED)
|
||||
@PostMapping("/create")
|
||||
public String create() {
|
||||
return "Created successfully!";
|
||||
}
|
||||
}
|
||||
```
|
||||
- HTTP 201 Created 응답을 반환.
|
||||
|
||||
---
|
||||
|
||||
### 11) `@ExceptionHandler`
|
||||
예외 발생 시 처리할 메서드를 정의합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@RestController
|
||||
public class ExceptionController {
|
||||
@GetMapping("/error")
|
||||
public String error() {
|
||||
throw new RuntimeException("Something went wrong!");
|
||||
}
|
||||
|
||||
@ExceptionHandler(RuntimeException.class)
|
||||
public String handleRuntimeException(RuntimeException e) {
|
||||
return "Handled error: " + e.getMessage();
|
||||
}
|
||||
}
|
||||
```
|
||||
- `/error` 요청 시 `"Handled error: Something went wrong!"` 반환.
|
||||
|
||||
---
|
||||
|
||||
### 12) `@CrossOrigin`
|
||||
CORS 문제를 해결할 때 사용합니다.
|
||||
|
||||
#### 예제:
|
||||
```java
|
||||
@RestController
|
||||
@CrossOrigin(origins = "http://example.com")
|
||||
public class CorsController {
|
||||
@GetMapping("/data")
|
||||
public String getData() {
|
||||
return "CORS enabled";
|
||||
}
|
||||
}
|
||||
```
|
||||
- `http://example.com`에서 요청 가능.
|
||||
|
||||
---
|
||||
|
||||
이제 Spring Boot MVC의 주요 어노테이션과 예제들을 이해했을 것입니다. 필요에 따라 적절한 어노테이션을 활용하여 프로젝트를 개발하면 됩니다.
|
||||
Reference in New Issue
Block a user