Spring Boot에서 GET 및 POST 요청 파라미터 처리 방법

  1. 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);
}
  1. 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);
}

태그: Spring Boot REST API HTTP 요청 @RequestParam @PathVariable

6월 5일 17:09에 게시됨