반응형

 

컨트롤러 메서드 매개변수

 

- 주요 매개 변수

 

1. Model

: 이동 대상에 전달한 데이터를 가지고 있는 인터페이스

 

2. RedirectAttributes

: 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스

원래 리다이렉트로는 데이터를 전달하지 않음

 

3. 자바빈즈 클래스

: 요청 파라미터를 가지고 있는 자바빈즈 클래스

 

4. MultipartFile

: 멀티파트 요청을 사용해 업로드된 파일 정보를 가지고 있는 인터페이스

 

5. BidingResult

: 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스

 

6. java.util.Locale

: 클라이언트 로캘

 

7. java.security.Principal

: 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스

ex) 로그인

 

 

 

요청 처리

 

 

  • URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득

MemberController.java

package kr.or.ddit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class MemberController {
	/*
	URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득
	
	요청URI : /register?userId=hongkd&password=1234
	요청파라미터(쿼리스트링) : userId=hongkd&password=1234
	요청방식 : get 
	
	스프링프레임워크에서는 파라미터를 매개변수로 받을 수 있음
	*/
	@ResponseBody
	@GetMapping("/register")
	public String registerByParameter(String userId,
				String password) {
		log.info("registerByParameter");
		
		log.info("userId : " + userId); // hongkd
		log.info("password : " + password); // 1234
		
		//ResponseBody가 없으면 /views/success.jsp
		//ResponseBody가 있으면 "success" 데이터를 응답
		return "success";
	}
	
}

 

결과 화면1

 

결과 화면2

 

 

 

  • URL경로 상의 경로(path) 변수(variable)로부터 요청 데이터를 취득

MemberController.java

메소드 추가

//URL경로 상의 경로(path) 변수(variable)로부터 요청 데이터를 취득
/*
요청URI : /register/hongkd
경로 변수 : hongkd
요청방식 : get
*/
@ResponseBody
@GetMapping("/register/{userId}")
public String registerByPath(@PathVariable(value="userId") String userId) {
	log.info("registerByPath");
	
	log.info("userId : " + userId); //hongkd
	
	return "success";
}

 

결과 화면3

 

GetMapping과 PathVariable에 적힌 것이 같아야 함

 

 

 

  • HTML 폼 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득

MemberController.java

/*
요청URI : /register01
요청파라미터 : {userId=hongkd,password=1234,coin=100}
요청방식 : post

HTML 폼 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득
HTML 폼 필드명 : formHome.jsp의 input 태그 중 name
컨트롤러 매개변수명 : public String register01() 괄호 안에 있는 이름

HTML 폼 필드값이 숫자일 경우, 컨트롤러 매개변수 타입이 문자열이면 그대로 문자열 형태로 요청 데이터를 취득
=> 숫자지만 문자로 받을 수 있음
	반면, 매개변수 타입이 숫자형이면 숫자로 타입이 변환됨
 */
@ResponseBody
@PostMapping("/register01")
public String register01(String userId, String password, int coin) {
	log.info("userId : " + userId);
	log.info("password : " + password);
	log.info("coin : " + coin);
	
	return "success";
}

 

 

formHome.jsp

<!-- 
요청URI : /register01
요청파라미터 : {userId=hongkd,password=1234,coin=100}
요청방식 : post
-->
<form action="/register01" method="post">
	<p>userId : <input type="text" name="userId" 
				value="hongkd" /></p>
	<p>password : <input type="password" name="password" 
				value="1234" /></p>
	<p>coin : <input type="text" name="coin" 
				value="100" /></p>
	<p><input type="submit" value="register01" /></p>
</form>

 

 

Member.java

package kr.or.ddit.vo;

import lombok.Data;

//POJO가 약해짐
@Data
public class Member {
	private String userId;
	private String userName = "hongkd";
	private String password = "1234";
	private int coin;
}

 

결과 화면4-1 : register01 버튼 클릭

 

결과 화면4-2

 

 

 

  • URL 경로 상의 경로 변수가 여러 개일 때 PathVariable 애너테이션을 사용하여 특정한 경로 변수명을 지정

MemberController.java

/*
URL 경로 상의 경로 변수가 여러 개일 때 PathVariable 애너테이션을 사용하여 특정한 경로 변수명을 지정

요청URI : /register/hongkd/100
경로변수 : hongkd, 100
요청방식 : get
 */
@ResponseBody
@GetMapping("/register/{userId}/{coin}")
public String registerByPath2(
	@PathVariable("userId") String userId,
	@PathVariable("coin") int coin
		) {
	log.info("userId : " + userId); //hongkd
	log.info("coin : " + coin); //100
	
	return "success";
}

 

결과 화면5

 

 

 

요청 데이터 처리 애너테이션

 

 

- 주요 애너테이션

1. @PathVariable

: URL에서 경로 변수 값을 가져오기 위한 애너테이션

 

2. @RequestParam

: 요청 파라미터 값을 가져오기 위한 애너테이션

 

3. @RequestHeader

: 요청 헤더 값을 가져오기 위한 애너테이션

 

4. @RequestBody

: 요청 본문 내용을 가져오기 위한 애너테이션

 

5. @Cookie Value

: 쿠키 값을 가져오기 위한 애너테이션

 

 

 

  • @RequestParam

=> HTML 폼 필드명과 컨트롤러 매개변수명을 일치하지 않고 데이터를 받고 싶을 때 @RequestParam을 사용한다.

/*
요청URI : /register01
요청파라미터 : {userId=hongkd,password=1234,coin=100}
요청방식 : post

HTML 폼 필드명과 컨트롤러 매개변수명이 일치하면 요청 데이터를 취득
HTML 폼 필드명 : formHome.jsp의 input 태그 중 name
컨트롤러 매개변수명 : public String register01() 괄호 안에 있는 이름

HTML 폼 필드값이 숫자일 경우, 컨트롤러 매개변수 타입이 문자열이면 그대로 문자열 형태로 요청 데이터를 취득
=> 숫자지만 문자로 받을 수 있음
	반면, 매개변수 타입이 숫자형이면 숫자로 타입이 변환됨
 */
@ResponseBody
@PostMapping("/register01")
public String register01(
		@RequestParam("userId") String id, String password, int coin) {
	log.info("userId : " + id);
	log.info("password : " + password);
	log.info("coin : " + coin);
	
	return "success";
}

 

결과 화면6-1 : register01 버튼 클릭

 

결과 화면6-2

 

 

 

요청 처리 자바빈즈

 

 

  • 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리 가능

MemberController.java

@ResponseBody
@PostMapping("/register01")
public String register01(
		@RequestParam("userId") String id, 
		@RequestParam("password") String pwd, 
		int coin,
		Member member) {
	log.info("id : " + id);
	log.info("pwd : " + pwd);
	log.info("coin : " + coin);
	log.info("member : " + member);
	
	return "success";
}

 

결과 화면7 : http://localhost/board/formHome 링크에서 register01 버튼 클릭 시 콘솔 화면

 

 

반응형