- GET 요청 처리 방식
1.1 메서드 인자로 파라미터 수신 파라미터가 적을 때 유용하며, 클라이언트와 서버의 매개변수 이름이 일치해야 한다.
@RestController
@RequestMapping("/user")
@Slf4j
public class DataController {
@GetMapping("/fetch")
public void fetchData(String userName, String userAge) {
log.info("사용자 이름: {}", userName);
log.info("나이: {}", userAge);
}
}
1.2 @RequestParam 사용하여 명시적 파라미터 지정 파라미터명과 필수 여부를 명확히 설정할 수 있다.
@GetMapping("/fetch")
public void fetchData(
@RequestParam(value = "userName", required = false) String name,
@RequestParam(value = "userAge", required = false) Integer age) {
log.info("이름: {}", name);
log.info("나이: {}", age);
}
1.3 DTO 클래스로 파라미터 수신 (단, @RequestParam 불가)
GET 요청에서는 @RequestParam 없이 직접 객체로 바인딩 가능하나, 필드명과 쿼리 파라미터명이 일치해야 함.
@GetMapping("/fetch")
public void fetchUser(UserInfo userInfo) {
log.info("이름: {}", userInfo.getName());
log.info("나이: {}", userInfo.getAge());
}
@Data
public static class UserInfo {
private String name;
private Integer age;
}
1.4 경로 변수(@PathVariable) 사용 URL 패턴에 포함된 값을 추출할 수 있음.
@GetMapping("/fetch/{name}/{age}")
public void fetchUserInfo(@PathVariable String name, @PathVariable Integer age) {
log.info("이름: {}, 나이: {}", name, age);
}
1.5 배열 파라미터 수신 동일한 키로 여러 값 전달 시 배열로 처리.
@GetMapping("/fetch")
public void fetchNames(String[] names) {
Arrays.stream(names).forEach(System.out::println);
}
1.6 컬렉션 파라미터 수신 (반드시 @RequestParam 필요)
List 또는 Set 형태로 받을 경우 반드시 @RequestParam 사용.
@GetMapping("/fetch")
public void fetchList(@RequestParam List<String> items) {
items.forEach(System.out::println);
}
- POST 요청 처리 방식
2.1 메서드 인자로 폼 데이터 수신 폼 타입으로 전송된 데이터는 기본적으로 메서드 인자로 받을 수 있음.
@PostMapping("/submit")
public void submitData(String userName, Integer userAge) {
log.info("이름: {}", userName);
log.info("나이: {}", userAge);
}
2.2 HttpServletRequest로 직접 접근 모든 파라미터를 직접 꺼내 사용할 수 있음.
@PostMapping("/submit")
public void handleRequest(HttpServletRequest request) {
String name = request.getParameter("userName");
String ageStr = request.getParameter("userAge");
Integer age = ageStr != null ? Integer.parseInt(ageStr) : null;
log.info("이름: {}, 나이: {}", name, age);
}
2.3 경로 변수로 값 전달
URL 경로에 포함된 값은 @PathVariable로 추출.
@PostMapping("/submit/{id}/{status}")
public void process(@PathVariable String id, @PathVariable String status) {
log.info("ID: {}, 상태: {}", id, status);
}
2.4 폼 데이터로 엔티티 클래스 수신
application/x-www-form-urlencoded 또는 multipart/form-data 형식으로 전송된 데이터도 자동 바인딩.
@PostMapping("/submit")
public void saveUser(UserInfo user) {
log.info("이름: {}, 나이: {}", user.getName(), user.getAge());
}
2.5 JSON 요청 본문(@RequestBody)으로 객체 수신
클라이언트가 Content-Type: application/json으로 전송한 경우, @RequestBody로 직렬화된 객체 수신.
@PostMapping("/submit")
public void saveJsonData(@RequestBody UserInfo user) {
log.info("이름: {}, 나이: {}", user.getName(), user.getAge());
}
2.6 배열/컬렉션 타입의 JSON 수신
JSON 배열이나 리스트도 @RequestBody로 처리 가능.
@PostMapping("/submit")
public void receiveArray(@RequestBody String[] tags) {
Arrays.stream(tags).forEach(System.out::println);
}
@PostMapping("/submit")
public void receiveList(@RequestBody List<String> tags) {
tags.forEach(System.out::println);
}
2.7 Map으로 파라미터 수신
모든 파라미터를 Map<String, Object> 형태로 받을 수 있음.
@PostMapping("/submit")
public void receiveAsMap(@RequestParam Map<String, Object> params) {
log.info("이름: {}", params.get("userName"));
log.info("나이: {}", params.get("userAge"));
}
2.8 단일 문자열 값 수신 (JSON 본문)
요청 본문에 단일 문자열만 포함된 경우에도 @RequestBody String으로 수신 가능.
@PostMapping("/submit")
public void receiveRawString(@RequestBody String content) {
log.info("내용: {}", content);
}