Blue Chicken - The Legend Of Zelda
본문 바로가기

개인공부

[java] `@RequestMapping`에서 `@PostMapping`으로 변경 시 파라미터 선언

`@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`: 별도의 어노테이션 필요 없이 사용.

각 파라미터의 타입과 사용 방식에 따라 적절한 어노테이션을 적용하여야 합니다.