💡 사용자 요청 시 파라미터 값을 넘겨서 데이터를 전달하는건 어떻게 받을까?
🔎 단일 파라미터 값을 전달받는 `RequestParam`
사용자가 `userid` 라는 속성 이름으로 값을 전달하면, 다음과 같이 모델에 속성 이름과 값을 추가하여 전달할 수 있다.
@GetMapping("/user/userid")
public String userId(@RequestParam("userid") String uid, Model model){
model.addAttribute("userid",uid);
return "/user/userinfo"; // userinfo.html 호출
}
이와 같이 사용자가 "userid" 속성에 대한 값을 `uid` 변수에 담아 보내면 `model.addAttribute()`를 통해 모델에 "userid" 속성 값으로 `uid` 값을 넣어 template 파일에 전달한다.
그럼 template 파일에도 "userid" 값을 받을 수 있도록 수정해주면 된다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SampleController</title>
</head>
<body>
<h1>userinfo.html</h1>
<h1 th:text="${userid}">유저 아이디</h1>
</body>
</html>
이렇게 해서 실행하면 다음과 같이 오류가 난다.
그 이유는 사용자 요청 시 `userid` 값을 넣어 보내주어야 하는데 전달하지 않아서 오류가 난 것이다.
`userid` 값을 넣어서 다시 요청해보자.
이 경우 `localhost:8080/user/userid?userid=홍길동`이라고 요청해주면 된다.
그럼 userid로 받은 홍길동이 잘 출력되는 것을 볼 수 있다.
✅ `@RequestParam`의 `required` 옵션
위 예제에서 `@RequestParam`을 통해 `"userid"` 값을 전달 받았었다. 하지만 `"userid"` 값을 사용자가 전달하지 않으면 오류가 나는 것을 확인할 수 있었다.
💡 만약 사용자가 값을 전달하지 않아도 오류가 나지 않도록 하려면 어떡해야 할까?
`@RequestParam`의 옵션에 `required` 라는 것이 있다. `required=true`가 디폴트 값으로 설정되어 있어, 별 다른 설정을 해주지 않으면 사용자가 항상 usierid 속성 값을 전달해 주어야 한다.
그럼 `required=false`로 지정하면 어떻게 될까?
그럼 `userid` 값이 필수가 아니기 때문에 값을 전달하지 않아도 오류가 나지 않는다.
🔽 `required=false`는 아래와 같이 설정할 수 있다.
@GetMapping("/user/userid")
public String userId(@RequestParam(value="userid", required = false) String uid, Model model){
model.addAttribute("userid",uid);
return "/user/userinfo"; // userinfo.html 호출
}
다시 재시작 해보면 오류가 나지 않는 것을 확인할 수 있다.
이 경우, 전달되는 값이 없으므로 아무것도 출력되지 않는다.
🔎 여러 개의 파라미터 값을 전달받는 `RequestParam`
이번에는 여러 개의 파라미터 값을 전달해보자.
@GetMapping("/user/userparams")
public String userParams(@RequestParam("userid") String userid,@RequestParam("username") String username, Model model){
model.addAttribute("userid",userid);
model.addAttribute("username",username);
return "/user/userinfo";
}
이렇게 하면 "userid"와 "username" 값을 전달받을 수 있다.
html 파일도 다음과 같이 변경해보자.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SampleController</title>
</head>
<body>
<h1>userinfo.html</h1>
<h1 th:text="${userid}">유저 아이디</h1>
<h1 th:text="${username}">유저 이름</h1>
</body>
</html>
그럼 사용자는 "localhost:8080/user/userparams?userid=아이디&username=홍길동" 이렇게 전달해주면 된다.
`userid` 로 `아이디`라는 값과 `username`으로 `홍길동`이라는 값이 잘 전달된 것을 확인할 수 있다.
💡 옆으로 쭉 나열해서 쓰는 것이 보기 힘들다면 엔터를 사용해서 아래로 나열해줘도 된다.
@GetMapping("/user/userparams")
public String userParams(
@RequestParam("userid") String uid,
@RequestParam("username") String uname,
@RequestParam("useremail") String uemail,
@RequestParam("userhp") String uhp,
Model model){
model.addAttribute("userid",uid);
model.addAttribute("username",uname);
model.addAttribute("useremail",uemail);
model.addAttribute("userhp",uhp);
return "/user/userinfo";
}
이렇게 되면 사용자는 `userid`, `username`, `useremail`, `userhp` 의 모든 값을 다 설정해서 전달해야 한다.
💡몇 개의 값만 `required=false`로 지정할 수 있다.
@GetMapping("/user/userparams")
public String userParams(
@RequestParam("userid") String uid,
@RequestParam("username") String uname,
@RequestParam("useremail") String uemail,
@RequestParam(value = "userhp", required = false) String uhp,
Model model){
model.addAttribute("userid",uid);
model.addAttribute("username",uname);
model.addAttribute("useremail",uemail);
model.addAttribute("userhp",uhp);
return "/user/userinfo";
}
그럼 사용자는 `userhp` 값을 전달하지 않아도 에러가 나지 않는다.
'스프링부트' 카테고리의 다른 글
[스프링부트] Get vs Post (0) | 2025.02.14 |
---|---|
[스프링부트] MVC 패턴 & 파라미터 전달하기 (0) | 2025.02.13 |
[스프링부트] 진입점과 Controller (0) | 2025.02.06 |