[Spring] RequestParam 파라미터 송신

ma0·2024년 9월 10일

JSP

목록 보기
3/7

@RequestParam

= HTTP 요청으로 전달되는 파라미터를 메서드의 인자로 매핑해 주는 어노테이션

  • 클라이언트에서 서버로 전달된 값을 컨트롤러 메서드에서 받아 처리 가능
  • 주로 GET / POST 요청에서 쿼리 파라미터, 폼 데이터 수신 시 사용

주요 기능

1. name="파라미터명"

= 파라미터 이름 지정. HTML의 폼 데이터나 URL 쿼리 스트링 파라미터 이름과 일치해야 함

2. defaultValue="기본값"

= 요청에 해당 파라미터가 없을 경우 사용할 기본값 설정
=> 파라미터 없거나 값이 전달되지 않아도 기본값 사용해 메서드 실행 가능

3. required

= 파라미터 필수 여부 지정. 기본값은 true 설정, 없다면 오류 발생
=> false로 설정 시, 파라미터가 없어도 오류 발생 X - 기본값 사용 가능


사용 예시

1. GET 요청 처리

<HTML>
<ul>
		<li><a href="param/send?name=Mike&age=25">a태그로 Parameter 송신</a></li>
		<li><a href="param/send">a태그로 Parameter 없이 송신</a></li>
	</ul>
@GetMapping("/param/send")
public String param(
      @RequestParam(name="name", defaultValue="홍길동") String name, 
      @RequestParam(name="age", defaultValue="20") int age) {
  System.out.println("name=" + name + ", age=" + age);
  return "result";
}
  • param/send?name=Mike$age=25 URL로부터 name, age 파라미터 받아 처리
  • 파라미터가 없다면 defaultValue인 홍길동, 20 설정

2. 폼 데이터 처리 (GET)

<h3>폼을 이용한 데이터의 전송(GET)</h3>
<form action="param/sendForm" method="GET">
	<label for="userid">아이디: </label>
	<input type="text" name="userid" placeholder="아이디 입력">
	
	<label for="userpwd">비밀번호: </label>
	<input type="password" name="userpwd" id="userpwd" placeholder="비밀번호 입력">
	<br><br>
	
	<input type="submit" value="전송">
	<input type="reset" value="취소">
</form>


@GetMapping("/param/sendForm")
public String sendForm(
		@RequestParam(name="userid", defaultValue="abc") String id,
		@RequestParam(name="userpwd", defaultValue="korea") String userpwd
		) {
	System.out.println("userid= " + id + ", userpwd= " + userpwd);
	
	return "result";
}

  • userIduserpwd가 없을 경우 각각 기본값으로 abc, korea 설정


3. 폼 데이터 처리 (POST)

<h3>폼을 이용한 데이터의 전송(POST)</h3>
	<form action="param/sendForm" method="POST">
		<label for="userid">아이디: </label>
		<input type="text" name="userid" placeholder="아이디 입력">
		
		<label for="userpwd">비밀번호: </label>
		<input type="password" name="userpwd" id="userpwd" placeholder="비밀번호 입력">
		<br><br>
		
		<input type="submit" value="전송">
		<input type="reset" value="취소">
	</form>
@PostMapping("/param/sendForm")
	public String sendForm2(
			@RequestParam(name="userid", defaultValue="abc") String userid,
			@RequestParam(name="userpwd", defaultValue="korea") String userpwd,
			Model model
			) {
		System.out.println("userid= " + userid + ", userpwd= " + userpwd);
		
		model.addAttribute("id", userid);
		model.addAttribute("pwd", userpwd);
		
		return "recieve";		// forward 방식
	}
  • Model 객체에 useiduserpwd를 추가해 뷰에서 사용할 수 있도록 전달
  <receibe.html>
  <h2>Model에서 데이터 꺼내기</h2>
	<p>
		html 문서는 Model의 값을 꺼낼 수 없다. <br>
		그래서 thymeleaf 문법을 사용해야 한다.
	</p>
	<p>
		아이디 : [[ ${id} ]] <br>
		비밀번호: [[ ${pwd} ]]
	</p>
    



@RequestParam 이외의 기타 송신 방법

1. ModelAttribute

Model과 ModelAttribute의 사용 참조

2. RequestBody

= JSON, XML 등의 요청 본문(body) 데이터를 자바 객체로 매핑 시 사용
- 주로 REST API 개발 시 JSON 형식의 데이터 처리에 유용

  • @RequestBody 예시 코드

    @PostMapping("/param/sendJson")
    public String sendFormWithRequestBody(@RequestBody User user, Model model) {
         System.out.println("userid= " + user.getUserid() + ", userpwd= " + user.getUserpwd());
    
         model.addAttribute("id", user.getUserid());
         model.addAttribute("pwd", user.getUserpwd());
    
         return "recieve";
       	}

    => 클라이언트가 JSON 데이터를 POST요청으로 보냈을 때, User 객체로 변환해 줌

3. PathVariable

= GET 요청에서 경로 변수 사용해 파라미터 전달
=> URL 경로 자체에 변수를 포함시켜 처리하는 방법

  • @PathVariable 예시 코드

    @GetMapping("/param/send/{userid}/{userpwd}")
    public String sendFormWithPathVariable(
         @PathVariable String userid, 
         @PathVariable String userpwd, 
         Model model) {
     System.out.println("userid= " + userid + ", userpwd= " + userpwd);
    
     model.addAttribute("id", userid);
     model.addAttribute("pwd", userpwd);
    
     return "recieve";
    }

    => URL이 /param/send/abc/korea와 같이 경로에 포함된 데이터 직접 추출해 사용 가능

profile
우당탕탕 개발 간잽 일기 - 간잽이 수백 번이면 전문가일지도?

0개의 댓글