본문 바로가기
Spring 프레임워크/메모

@RequestParam() 어노테이션

by Hwanii_ 2023. 8. 7.
728x90

1.

예를들어, View 로 부터,

searchCondition 이라는 이름의 값을 가져오고,

searchContent 이라는 이름의 값을 가져온다고 해보자.

 

이 둘을 가져 오려면, 아래와 같이 코드를 작성 해야 한다.

 

@RequestMapping(value = "/main.do")
public String main(Request request) {

    String searchCondition = request.getParameter("searchCondition");
    String searchContent = request.getParameter("searchContent");
}

 

근데, request를 주체로 사용 하기 위해서, main() 메서드의 인자로 Request request 를 넣었기 때문에,

해당 클래스는 import 덕분에 상대적으로 무거워지게 된다.

 

2.

이때, 해결 할 수 있는 방법이 바로, @RequestParam() 어노테이션 이다.

 

3.

아래와 같이 작성 하게 된다.

 

@RequestMapping(value = "/main.do")
	public String main(@RequestParam(value = "searchCondition", defaultValue = "TITLE", required = false)String searchCondition, @RequestParam(value = "searchContent", defaultValue = "", required = false)String searchContent) {
    
        System.out.println("log : searchCondition : " + searchCondition);
        System.out.println("log : searchContent : " + searchContent);
 	}
    
    //	Console
    
    //	log : searchCondition : TITLE
    //	log : searchContent : (사용자가 입력한 값)

 

근데, 이 방식도 사실 구식 이다.

 

왜냐하면, main() 메서드 내부의 인자로 줄줄이 길게 작성 해야 하기 때문 이다.

 

가독성 측면으로도 안좋고, 암튼 오래된 구식 방법 이다.

 

4.

그래서, 이러한 경우에 !

필요한 파라미터명을 VO 클래스 내부에 tmp 변수를 만들고,

Command 객체가 특정 자료형의 참조변수 까지 객체화를 해주니까,

그 개념을 사용 해서 필요한 데이터를 set 하면 된다.

 

5.

이때, 두가지 방법 모두 괜찮다.

 

1) searchCondition 을 예시로 들면,

Controller 에서 직접 필요한 값을 set 해주기

 

예시)

 

//	VO 클래스 멤버변수

private String searchCondition;

//	====================================================

//	mainController.java

public class MainController {

	public String main(BoardVO bVO, BoardDAO bDAO, ..) {
	
		bVO.setSearchCondition("키워드");
	}
}

 

2)

애초에 View에서 파라미터명 대소문자를 잘 맞춰서,

searchCondition 이라는 이름으로 필요한 키워드값을,

hidden 태그에 담아서 보내던지,

또는,

<a href = ""> 해서 링크에 실어서 보내던지,

하면 된다.

 

그러면, Command 객체가 파라미터명이 같은것을 찾아서,

setter을 자동 호출해서 데이터를 set 해준다.

 

예시)

 

 

selectAll 쿼리문은 총 3개 라서, 키워드값이 필요 하다.

 

 

 

update 쿼리문은 총 2개 라서, 키워드값이 필요 하다.

 

 

그러면, C가 V에게 나 searchCondition 이라는 이름으로 그 이름의 값이 필요 하다 ~

값은 Cnt 이야 ~ 라고 말해주면,

V가 응 보내줄게 ~ 하는것이다.

 

 

 

3)

정답은 없으며, 모두 괜찮은 방법 이다.

 

[ 정리 ]

 

무언가 키워드값, .. 등이 필요 할 때,

임시로 VO 클래스 내부에 tmp 변수를 만든다.

 

그리고,

해당하는 tmp 변수에 필요한 값을,

C가 직접 set 하던지,

또는,

V가 필요한 키워드값 을 보내준다.

반응형

'Spring 프레임워크 > 메모' 카테고리의 다른 글

throws 와 try-catch 메모  (0) 2023.08.17
Spring 프레임워크 JoinPoint 인터페이스  (0) 2023.08.12
[ Spring ] redirect: 와 forward:  (0) 2023.08.07
Spring 로그 분석 하기  (0) 2023.08.06
의존 관계와 포함 관계  (0) 2023.08.05