2021. 11. 26. 10:55ㆍSpring
스프링에서 request parameter를 받는 다양한 방법에 대해 정리했다.
1️⃣ request parameter 처리
2️⃣ GET 방식/ POST 방식
3️⃣ @RequestParam
4️⃣ 커맨드 객체 (Bean 객체)
5️⃣ @ModelAttribute
6️⃣ @PathVariable
7️⃣ redirect
1. HttpServletRequest 매개변수
핸들러 메서드에서 파라미터로 HttpServletRequest를 받을 수 있다.
HttpServletRequest에는 parameter 또는 request 관련 정보들이 담겨있다.
파라미터로 id 값 설정
2. GET, POST 방식으로 request 받기
기본적으로 @RequestMapping은 GET방식에서 동작하기 때문에 생략이 가능하다.
POST 방식과 GET방식으로 핸들러 메서드를 따로 작성하고 결과를 확인했다.
form의 method을 POST로 지정하고 등록 버튼을 누르면
post 방식으로 지정한 핸들러 메서드가 동작했다.
이번에는 get 방식으로 name을 url에 작성을 했더니
GET방식으로 지정한 핸들러 메서드가 동작했다.
그리고 GET과 POST를 둘다 받을 수도 있다.
@RequestMapping method에 POST와 GET을 모두 지정해준다.
-> POST 방식 결과
-> GET 방식 결과
3. 매개변수로 request parameter 받기
handler에 request parameter의 name 값과 같은 이름의 매개변수가 있으면 그 매개변수가 request parameter 값을 받아온다.
4. @RequestParam
앞에서 request parameter와 같은이름의 매개변수일 때만 가져올 수 있었는데 상황에 따라 handler 메서드의 매개변수 이름을 request parameter와 일치시켜주기 어려울 때가 있다.
이럴 때 @RequestParam 어노테이션을 사용해서 request parameter와 다른 이름의 매개변수를 받을 수 있다.
매개변수 userid는 "id"라는 request parameter를 받아오고, username 매개변수는 "name"이라는 request parameter를 받아온다.
5. 커맨드 객체
앞에 예시처럼 request parameter가 2개 정도면 큰 문제는 없지만 request parameter가 점점 많아지면 잔코딩도 많아지고 유지보수도 까다롭다는 단점이 있다.
따라서 스프링에서는 커멘드 객체 (Command Object)를 통해 여러 request parameter를 한번에 받아올 수 있다.
❗ 커맨드 객체 (Command Object)
: form 으로부터 넘어오는 parameter들을 담은 Bean 객체를 의미한다.
WriteDTO라는 빈 객체 생성 (viewcnt, regdate, uid 는 나중에 사용될 것으로 지금은 굳이 작성 안해도 되긴함)
package com.lec.spring.beans;
public class WriteDTO {
private int uid;
private String subject;
private String name;
private int viewcnt;
private String regdate;
private String content;
public WriteDTO() {
super();
}
public WriteDTO(int uid, String subject, String name, int viewcnt, String regdate, String content) {
super();
this.uid = uid;
this.subject = subject;
this.name = name;
this.viewcnt = viewcnt;
this.regdate = regdate;
this.content=content;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getViewcnt() {
return viewcnt;
}
public void setViewcnt(int viewcnt) {
this.viewcnt = viewcnt;
}
public String getRegdate() {
return regdate;
}
public void setRegdate(String regdate) {
this.regdate = regdate;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
6. @ModelAttribute
커맨드 객체의 model의 attribute 이름을 바꿔주기 위해서는 @ModelAttribute 를 사용한다.
7. @PathVariable
request parameter를 GET방식의 query String 이 아닌 'url 경로'로 담아서 전달할 수 도 있다.
8. redirect
handler 메서드의 뷰 리턴값을 적을 때 "redirect:OOO"으로 작성하면 해당 url로 redirect 된다.
❗ redirect란?
: 웹 브라우저가 어떤 url로 웹 서버를 요청했을 때 다른 url로 넘겨주는 것을 말한다.
- 예제
나이를 입력했을 때 성인이면 성인임을 알려주는 페이지로, 미성년자라면 미성년자임을 알려주는 페이지로 redirect하는 흐름으로 작성한다.
❗ RedirectAttributes
그리고 RedirectAttributes를 사용하면 리다이렉트로 url parameter 값을 넘겨줄 수있다.
'Spring' 카테고리의 다른 글
Spring MVC 간단한 게시판 만들기 (0) | 2021.11.29 |
---|---|
Spring Validation 폼 데이터 검증 Validator, @Vaild (0) | 2021.11.26 |
Spring @Controller, @RequestMapping (0) | 2021.11.26 |
Spring Error 예외 처리 하는 법 (0) | 2021.11.24 |
Spring MVC, Mybatis [2] 간단한 사용자 게시판 만들기 (0) | 2021.11.24 |