WEB/Spring

[Spring]@RequestParam의 파라미터 사용의 이해

MoonSta 2023. 1. 25. 13:34
 

클라이언트에서 서보로의 요청 시에 HTTP 요청 파라미터를 컨트롤러 메서드의 파라미터로 전달받을 때 사용되는 어노테이션인 @RequestParam에 대해 알아보자.


@RequestParam 사용법

@Controller
@RequestMapping("/test")
public class TestController {
    @GetMapping("/RequestParam")
    public String(@RequestParam String param) {
        return param;
    }
}

 

위와 같은 방법으로 클라이언트에서 전달받은 파라미터를 param으로 받을 수 있다. 포스트맨을 사용하여 직접 테스트해 보도록 하자.

 

파라미터 전달 테스트
Postman 단일 테스트 결과

 

 클라이언트가 보낸 Key = Value 형태의 쿼리 변수에 따라 param에는 사용자가 입력한 parameter의 값이 담긴다. 또한 @RequestParam으로 단일 파라미터가 아닌 여러 개의 파라미터도 각각 매핑시킬 수 있다. 하지만 서버로 전달해야 할 파라미터가 여러 개라면 어떻게 처리해야 할까? 이 부분도 알아보도록 하자.

 

@Controller
@RequestMapping("/test")
public class TestController {
    @GetMapping("/RequestParam")
    public String(@RequestParam String param1
                  @RequestParam String param2) {
        
        return param1 + param2;
    }
}

 

포스트맨 테스트
Postman 복수 테스트 결과

 

? Key1 = Value1 & Key2 = Value2와 같은 방식으로 &을 구분자로 여러 개의 파라미터를 담을 수 있다.

 

 


 

@RequestParam의 여러 가지 옵션

@Controller
@RequestMapping("/test")
public class TestController {
    @GetMapping("/RequestParam")
    public String(@RequestParam String param) {
        return param;
    }
}

예를 들어 위와 같이 코드를 작성한 후 해당 컨트롤러를 호출하는데, 클라이언트에서 파라미터를 넘기지 않는다면 어떠한 문제가 발생할까? 바로 Required String parameter 'param' is not present와 같은 예외를 발생시킵니다. 이러한 예외를 사전에 대비하기 위해 @RequestParam의 옵션인 required 옵션을 추가해주어야 합니다.

@Controller
@RequestMapping("/test")
public class TestController {
    @GetMapping("/RequestParam")
    public String(@RequestParam(required = false) String param) {
        return param;
    }
}

required = false로 새로 옵션을 추가해 주었습니다. 이처럼 옵션을 추가해 주면 key값이 없다고 해서 예외를 발생시키지 않습니다. (기본적으로 true로 지정, 매핑될 변수가 없을 때 null 할당)

 

 

@Controller
@RequestMapping("/test")
public class TestController {
    @GetMapping("/RequestParam")
    public String(@RequestParam(required = false, defaultValue = "기본값 설정") String param) {
        return param;
    }
}

하지만 위의 방법 이외에도 클라이언트로부터 값이 넘어오지 않는 경우를 대비에 defaultValue 옵션을 사용하여 기본값을 세팅할 수 있습니다.