
Spring Boot에서 JSON 본문을 받을 때에는 반드시 @RequestBody로 받아야 하고, 그걸 받을 객체가 필요하다!
예를 들어,
@PostMapping("/login")
public ResponseEntity<User> login(@RequestParam String teamName,
@RequestParam String userName) {
User user = userService.login(teamName, userName);
return ResponseEntity.ok(user);
}
이런 식으로 JSON 본문을 @RequestParam으로 받으면 오류가 난다.
그래서 그걸 받을 객체를 만들고,
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class UserRequest {
private String teamName;
private String userName;
}
아래와 같이 @RequestBody로 받아주면 된다!
@PostMapping("/login")
public ResponseEntity<User> login(@RequestBody UserRequest request) {
User user = userService.loginOrCreateUser(request.getTeamName(), request.getUserName());
return ResponseEntity.ok(user);
}
데이터가 많을 때 구조화해서 전송 가능 (JSON 형태)
보안적, 가독성 좋고, 복잡한 요청에 적합
대부분의 POST는 @RequestBody 쓰는 것이 정석
POST: 주로 사용 (폼 제출, 로그인, 등록 등)
PUT: 많이 사용 (전체 수정)
PATCH: 자주 사용 (부분 수정)
DELETE: 가능은 하나 잘 안 씀. 표준이 아니기 때문.
GET: 불가능 (HTTP 스펙 상 Body 없음)
쿼리 파라미터에서 값을 받아올 때 사용.
보통 URL에 ?key=value 형태로 붙어있는 데이터
예시
GET /api/users?teamName=TeamA&userName=철수
주로 GET이나 DELETE에서 많이 사용
URL이 깔끔하지 않을 수도 있음
데이터가 노출되기 쉬움
URL 경로 자체에 포함된 값을 변수처럼 가져오는 방식
예시
DELETE /api/users/logout/TeamA/철수
REST API 스타일에 가장 잘 어울림
리소스를 명확하게 식별할 때 좋음
URL만 보고도 어떤 데이터를 삭제/조회하는지 명확
데이터 조회 (간단한 필터) -> @RequestParam
객체 전달, 로그인, 등록 등 -> @RequestBody
특정 리소스 명시 삭제/조회 -> @PathVariable