반응형
1. @RequestParma : URL 또는 폼 데이터 바인딩
- 동작 : 서블릿 API가 합쳐 둔 request parameter map에서 값을 꺼내어 메서드 인자로 주입한다. 단순 타입, 배열, List, Map 모두 지원한다.
- GET, POST 구분 없음 : x-www-form-unlencoded POST도 동일하게 처리하므로 검색, 필터, 로그인 폼 모두 활용 가능하다.
- 멀티파트 파일 : 파일 자체는 @RequestPart / MultipartFile을 쓰지만 파일명 같은 메타데이터는 @RequestParam으로 함께 받을 수 있다.
@GetMapping("/books")
public List<Book> list(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size,
@RequestParam(required = false) String category) { … }
2. @RequestBody : 본문 전체를객체로 수신
- 동작 : Content-Type에 맞춰 등록된 HttpMessageConverter가 InputStream을 읽어 DTO로 역직렬화한다. JSON -> Jackson, XML -> JAXB 등
- 검증 : @Valid + Bean Validation을 붙이면 역직렬화 직후 필드 검증이 작동한다.
@PostMapping("/books")
public Book create(@Valid @RequestBody BookCreateRequest req) { … }
3. List 객체를 Parameter로 받는 경우
아래는 List객체를 Paramter로 전달할 경우, 상황에 따른 @RequestParam과 @RequestBody 중 일반적인 선택 예시이다.
참고용으로 확인하고, 프로젝트 상황에 따라 사용하면 된다.
| @RequestParam | @RequestBody | |
| 리스트 구조 | List<Long>, List<String>처럼 단일 값 타입 | List<OrderLine> 처럼 중첩 필드가 있는 객체 |
| 개수 길이 | 수 10 이하, 각 값이 짧을 때 | 수십개, 수백개 이상이거나 값이 길다 |
| URL 노출 | 파라미터가 URL에 남아도 문제 없다 | 민감 정보 숨겨야 하거나 URL 길이 한계 우려가 있다. |
4. @RequestParam & @RequestBody 사용 선택 예시
아래는 @RequestParma과 @RequestBody를 언제 사용할지 선택하는 일반적인 예시이다. 프로젝트 상황에 따라 아랴와 다르게 사용을 할 수도 있다.
| 구분 | @RequestParam | @RequestBody |
| HTTP 메서드 | GET / DELETE | POST/PUT/PATCH |
| 데이터 개수, 복잡도 | 1 ~ 4개의 단순 값 | 깊이 있는 객체, 컬렉션 |
| 보안, 가시성 요구 | URL 공유, 캐시, SEO가 중요 | 민감 데이터, 로그 최소화 |
반응형
'노빠꾸 개발일지 > SPRING' 카테고리의 다른 글
| [스프링 트랜잭션] 스프링 트랜잭션 기본 (0) | 2024.08.29 |
|---|---|
| [Spring Data JPA] 쿼리 메소드 @Query 어노테이션 JPQL 쿼리 (0) | 2023.06.15 |
| [Spring Data JPA] 쿼리 메소드(Query Method) 방식 알아보기 (0) | 2023.06.14 |
| [Spring Boot] 스프링부트 H2 DB 연결해보기 (0) | 2023.06.13 |
| [스프링] 의존성 주입(Dependency Injection) 방법 (0) | 2023.06.12 |
