스프링부트

[스프링부트] 사용자 요청 - 파라미터 값 전달하기

제에엔 2025. 2. 13. 19:58
💡 사용자 요청 시 파라미터 값을 넘겨서 데이터를 전달하는건 어떻게 받을까?

🔎 단일 파라미터 값을 전달받는 `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` 값을 전달하지 않아도 에러가 나지 않는다.