`@RequestMapping`에서 `@PostMapping`으로 변경하면서 모든 파라미터에 `@RequestBody`를 붙이는 것은 적절하지 않습니다. `@RequestBody`는 주로 HTTP 요청 본문(body)을 Java 객체로 변환할 때 사용됩니다. 따라서 각 파라미터의 역할에 따라 적절한 어노테이션을 사용해야 합니다.
### 파라미터에 적합한 어노테이션
1. **PmVo (커스텀 객체)**:
- 만약 이 객체가 클라이언트가 JSON, XML 등으로 전송하는 데이터라면 `@RequestBody`를 붙입니다.
- 하지만, 만약 클라이언트가 쿼리 파라미터나 폼 데이터를 통해 데이터를 전송하는 경우 `@RequestParam` 또는 `@ModelAttribute`를 사용할 수 있습니다.
```java
@PostMapping("/someEndpoint")
public String someMethod(@RequestBody PmVo pmVo, HttpSession session, Integer someInteger, HttpServletResponse response) {
// 메소드 본문
}
```
2. **HttpSession**:
- `HttpSession`은 세션 객체를 통해 현재 세션에 접근하기 위한 파라미터입니다. 여기에 어노테이션을 붙일 필요가 없습니다.
```java
@PostMapping("/someEndpoint")
public String someMethod(PmVo pmVo, HttpSession session, Integer someInteger, HttpServletResponse response) {
// 메소드 본문
}
```
3. **Integer**:
- 이 파라미터가 요청 본문에서 오는 것이 아니라, 쿼리 파라미터나 경로 변수라면 `@RequestParam` 또는 `@PathVariable`을 사용해야 합니다.
- 쿼리 파라미터라면 `@RequestParam`을 사용하고, 경로 변수라면 `@PathVariable`을 사용합니다.
```java
@PostMapping("/someEndpoint")
public String someMethod(@RequestBody PmVo pmVo, HttpSession session, @RequestParam Integer someInteger, HttpServletResponse response) {
// 메소드 본문
}
```
4. **HttpServletResponse**:
- 이 파라미터도 `HttpSession`처럼 어노테이션이 필요하지 않습니다. 직접 사용 가능합니다.
```java
@PostMapping("/someEndpoint")
public String someMethod(@RequestBody PmVo pmVo, HttpSession session, @RequestParam Integer someInteger, HttpServletResponse response) {
// 메소드 본문
}
```
### 최종 코드 예시
만약 클라이언트가 `PmVo`를 JSON 형식으로 보내고, `Integer` 값이 쿼리 파라미터로 전달된다면:
```java
@PostMapping("/someEndpoint")
public String someMethod(@RequestBody PmVo pmVo, HttpSession session, @RequestParam Integer someInteger, HttpServletResponse response) {
// 메소드 본문
}
```
이렇게 작성하면 각 파라미터의 역할에 맞는 어노테이션을 올바르게 적용할 수 있습니다.
### 정리
- `@RequestBody`: 요청 본문에서 객체를 가져올 때 사용 (예: JSON, XML).
- `@RequestParam`: 쿼리 파라미터나 폼 데이터를 받을 때 사용.
- `@PathVariable`: URL 경로에서 변수를 받을 때 사용.
- `HttpSession`, `HttpServletResponse`: 별도의 어노테이션 필요 없이 사용.
각 파라미터의 타입과 사용 방식에 따라 적절한 어노테이션을 적용하여야 합니다.
'개인공부' 카테고리의 다른 글
| [vuetify]class="text-xs-center" 는 vuetify 1에서 사용하던것 (1) | 2024.08.11 |
|---|---|
| [vue.js+prettier]prettier적용 (0) | 2024.08.11 |
| [vue3.js]const변수 (0) | 2024.08.04 |
| [eclipse+lombok]lombok 적용하기 (0) | 2024.07.28 |
| [egovframework template]ibatis에서 mybatis로 (0) | 2024.07.28 |