스프링이 제공하는 @RequestParam 사용하면 요청 파라미터를 편리하게 사용할 수 있다.
@Controller
@Slf4j
public class RequestParamController {
...
@RequestMapping("/request-param-v2")
public String requestParamV2(
@RequestParam("username") String memberName,
@RequestParam("age") int memberAge){
log.info("username={}, age={}", memberName, memberAge);
return "ok";
}
}
@RequestParam : 파라미터 이름으로 바인딩
@RequestParam("username") String memberName, @Request("age") int memberAge는
아래 호출 URL에서 key와 같다.(username, age)
@RequestParam("username") String memberName 은 다음과 같은 것이다.
👉 request.getParameter("username");
HTTP 파라미터 이름이 변수 이름과 같으면 @RequestParam("HTTP 파라미터 이름") 👈 요 부분이 생략 가능하다.
@ResponseBody
@RequestMapping("/request-param-v3")
public String requestParamV3(
//@RequestParam("username") String username,
//@RequestParam("age") int age){
@RequestParam String username,
@RequestParam int age){
log.info("username={}, age={}", username, age);
return "ok";
}
+ String, int, Integer 등의 단순 타입이면 @RequestParam 도 생략 가능하다.
즉, 단순 타입이면 @RequestParam을 적지 않아도 적용이 되는 것이다.
@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamV4(String username, int age){
log.info("username={}, age={}", username, age);
return "ok";
}
🤨 어노테이션을 너무 생략하면 직관적이지 않기 때문에 어노테이션을 사용해 명확히 보여주는 것이 더 나을 것 같다.
required
@RequestParam에 required를 적으면 파라미터의 필수 여부를 나타낸다.
기본값은 파라미터 필수인 true이다.
@RequestParam(required = true)
다음과 같은 코드가 있을 때
username은 required = true 이므로 파라미터가 필수이고
age는 required = false 이므로 파라미터가 필수가 아니다.
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(
@RequestParam(required = true) String username,
@RequestParam(required = false) int age){
log.info("username={}, age={}", username, age);
return "ok";
}
age 파라미터는 필수가 아니니까 다음과 같이 호출했는데 에러가 발생했다.
이유는 @RequestParam(required = false) int age 코드를 보면 알 수 있다.
변수 age의 타입이 int이기 때문에 null 값이 들어가 에러가 난 것이다.
변수 age를 Integer로 변경해 주면
age 값을 넣어 호출하지 않아도 required = false 이기 때문에 정상 호출된다.
defaultValue
파라미터에 값이 없는 경우 defaultValue를 사용하면 설정한 기본 값으로 적용할 수 있다.
설정한 기본값이 이미 있기 때문에 defaultValud에 required를 사용하는 건 의미가 없다.
@ResponseBody
@RequestMapping("/request-param-default")
public String requestParamDefault(
@RequestParam(required = true, defaultValue = "guest") String username,
@RequestParam(required = false, defaultValue = "-1") int age){
log.info("username={}, age={}", username, age);
return "ok";
}
username, age 값 없이 호출했지만, required의 true, false 여부와 관계없이 호출에 성공했다.
대신 defaultValue로 설정한 값이 username, age에 출력됬다.
'💻공부 > Spring 🍃' 카테고리의 다른 글
@ModelAttribute (0) | 2023.05.12 |
---|---|
요청에 관하여 (0) | 2023.05.11 |
로깅로깅 (0) | 2023.05.11 |
서블릿(Servlet) (0) | 2023.02.19 |
URL 인코딩 (0) | 2023.02.11 |
댓글