컨트롤러 메서드 매개변수
- 주요 매개 변수
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";
}
}
- 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";
}
- 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;
}
- 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";
}
요청 데이터 처리 애너테이션
- 주요 애너테이션
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";
}
요청 처리 자바빈즈
- 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리 가능
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";
}
'스프링 프레임워크' 카테고리의 다른 글
[스프링 프레임워크] 16장 컨트롤러 요청 처리3(폼 필드 요소 값을 매개변수로 처리) (1) | 2024.05.02 |
---|---|
[스프링 프레임워크] 15장 컨트롤러 요청 처리2(Date 타입 처리, DateTimeFormat 애너테이션) (1) | 2024.05.01 |
[스프링 프레임워크] 13장 컨트롤러 응답 (0) | 2024.04.30 |
[스프링 프레임워크] 12장 book 파일을 ajax로 변경 (0) | 2024.04.30 |
[스프링 프레임워크] 11장 컨트롤러 요청 매핑 (0) | 2024.04.29 |