파게로그

[Spring MVC] Query String 파싱, @RequestParam 본문

콤퓨타 왕기초/Spring

[Spring MVC] Query String 파싱, @RequestParam

파게 2021. 5. 3. 02:26

Java Doc for @RequestParam

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html

 

Query String 파싱

Servlet programming에서는 다음과 같은 방식으로 HTTP 요청의 파라미터를 얻을 수 있다.

 

@RequestMapping("/index")
public void index(HttpServletRequest req) {
    String p = req.getParameter("p");
    int value = Integer.parseInt(p);
}

 

Spring을 사용하면 이는 보다 편하다.

HTTP 요청의 파라미터의 key를, 컨트롤러 메서드의 파라미터의 변수명으로 지정해주기만 해도 알아서 그 값이 담긴다.

 

@RequestMapping("/index")
public void index(String p) {
    int value = Integer.parseInt(p);
}

 

게다가 바로 위 코드에서는, String p 대신 int p로 파라미터를 받아, 별도의 파싱 없이 바로 값을 이용할 수도 있다.


Query String 파싱 후 다른 변수명 사용

하지만 p가 아니라 다른 변수명으로 값을 받고 싶다면 어떻게 해야 할까? Query String은 URL에 포함되므로 변수명을 짧게 쓰려는 경향이 있기 때문에 이를 그대로 코드에 사용하고자 하면 불편할 수 있다. 예를 들어 key값 대신 full name을 사용하고 싶다면 아래와 같이 Annotation을 통해서 다른 변수명을 사용할 수 있다.

 

@RequestMapping("/index")
public void index(@RequestParam("p") String page) {
    int value = Integer.parseInt(page);
}

기본값 설정

Null 예외를 막기 위해 기본값을 설정할 수도 있다. 이 또한 @RequestParam의 속성값 지정을 통해 가능하다. 참고로 여기서 name 대신 value라는 속성명으로도 사용할 수 있다.

 

@RequestMapping("/index")
public void index(@RequestParam(name="p", defaultValue="1") String page) {
    int value = Integer.parseInt(page);
}

 

그리고 required의 속성의 기본값은 true인데 이를 false로 설정하면 값이 전달되지 않더라도 오류가 발생하지 않는다. 다만 int형은 null을 담지 못하므로 Integer형으로 선언해야 한다.

 

이외에도 Map으로도 받을 수 있다. 자세한 내용은 최상단의 공식문서를 참고한다.

 

Comments