2024. 10. 11. 19:06ㆍSpring
오늘은 QueryString을 파라미터로 받아오는 방법에 대해 알아보자.
만약, URL요청이 localhost:8080/info?name="yubin"
이렇게 들어왔을 때, info 뒤의 name이 QueryString이다.
요청을 받아서 처리하는 컨트롤러에서 이 쿼리스트링을 사용해야 한다면 그냥 바로 파라미터로 받아올 수 있다.
@RequestMapping("/info")
public void info(String name) {
System.out.println(name);
}
원래라면 request에서 이 쿼리스트링을 받아와야 하지만,
스프링은 아주 편하게 자동으로 연결해준다.하지만 주의해야할 점은 스프링이 파라미터의 이름과 쿼리스트링의 이름이 일치해야만 연결을 해준다는 것이다.
만약 파라미터의 이름을 name이 아닌 다른 이름으로 받고싶다면 어떻게 해야할까?
보통 브라우저는 URL길이의 제한을 두고 있기 때문에 쿼리스트링은 최대한 간결하게 적는 것이 좋고,
자바에서 변수의 이름은 최대한 알기 쉽고 직관적으로 적어줘야 하기 때문에 서로의 이름이 달라질 수 있다.
@RequestParam
위와 같은 문제를 해결하기 위해 @RequestParam 어노테이션을 사용할 수 있다.
@RequestMapping("/info")
public void info(@RequestParam(name="name") String userName) {
System.out.println(userName);
}
위와 같은 코드로 바꿔 준다면 쿼리스트링으로 들어온 name을 위 메서드에서는 userName으로 바꿔 사용할 수 있다.
@RequestParam의 옵션
- name : 바로 위에서 name옵션을 사용하여 파라미터의 변수 이름을 바꿔줄 수 있었다.
- defaultValue : 위와 같은 코드를 쓴 다음 그냥 /info URL로 들어가면 어떻게 될까? userName이라는 문자열을 받아오기로 했는데 아무것도 들어가지 않았기 때문에 오류가 발생한다.
이 때 사용할 수 있는 옵션이 defaultValue다.
요청에 지정한 쿼리스트링이 들어오지 않았을 경우 해당 쿼리스트링의 기본값을 지정할 수 있다. - required : 이 required는 따로 지정하지 않으면 기본값은 true로 설정되어있다.
만약 이 옵션을 false로 설정한다면 쿼리스트링의 값이 들어오지 않았을 경우 값을 null로 처리한다.
@RequestMapping("/info")
public void info(@RequestParam(name="name", required=false) String userName) {
System.out.println(userName);
}
// 만약 name 쿼리스트링이 들어오지 않은채 위 함수가 실행되면
// userName의 값은 null로 처리된다.
QueryString의 자료형
이 쿼리스트링은 받아올 때 String으로 인식한다.
따라서 매개변수의 타입도 String으로 해야 옳다.
예를 들어, localhost:8080/info?name="yubin"&age="20" 같은 요청이 들어왔을 때,
age의 값은 숫자 30이 아니라 문자열 30으로 인식한다.
그래서 원래라면 모두 String으로 받아야 옳지만
스프링은 이를 인식하여 int로 바꿔주기 때문에 자료형을 int로 해도 괜찮다
@RequestMapping("/info")
public void info(@RequestParam(name="age") int userAge) {
System.out.println(userName);
}
만약 스프링이 자동으로 바꿔주지 않는다면
String을 int로 바꿔주는 코드 1줄이 더 추가되었을 것이다.
하지만 Spring이 자동으로 변환할 수 없는 자료형이거나 잘못된 값이 들어오면 예외가 발생할 수 있으므로, 자료형 변환에 꼭 주의해야 한다.
'Spring' 카테고리의 다른 글
[Spring] Spring Boot 시작하기 (1) | 2024.10.23 |
---|---|
[Spring] DispatcherServlet (0) | 2024.10.12 |
[Spring] ViewResolver (0) | 2024.10.11 |
[Spring] 인증 메일 보내기 (1) | 2024.10.11 |
[Project] 실시간 1:1 채팅 (0) | 2024.10.10 |