Spring

[Spring] @RequestParam / Command 객체 사용시 DTO(Data Transfer Object) 클래스에 명시되지 않은 변수를 포함하고 싶은 상황 / DTO에 없는 멤버 변수의 파라미터 정보

bkuk 2023. 3. 6. 22:26

Command 클래스에 없는 파라미터

Command 객체를 이용하면 클라이언트에서 넘겨준 요청 파라미터 정보를 받아낼 수 있다. 하지만 이를 위해서는 반드시 요청 파라미터와 맵핑될 멤버변수와 Setter 메서드가 Command 클래스에 선언되어 있어야 한다. 그런데 Command 객체에는 없는 파라미터를 Command 클래스에서 사용하려면?

 

Spring MVC에서는 HTTP 요청 파라미터 정보를 추출하기 위해서 어노테이션을 통해 기능을 제공한다.

 

물론, 어노테이션을 사용하기 싫다면 멤버변수에 추가, Setter/Getter 메서드를 추가해서 사용하면 된다.

 


 

사용자가 글 목록 화면에서 검색 조건과 검색 키워드를 입력하고 검색 버튼을 클릭하면 "/getBoardList.do"와 매핑된 getBoardList() 메서드가 실행된다. 

<form action="getBoardList.do" method="post">
<table border="1" cellpadding="0" cellspacing="0" width="700">
<tr>
	<td align="right">
		<select name = "searchCondition">
			<option value="TITLE"> 제목
			<option value="CONTENT"> 내용
		</select>
		<input name="searchKeyword" type="text"/>
		<input type="submit" value="검색"/>
	</td>
</tr>
</table>
</form>
<!-- 검색 종료 -->

그런데, BoardVO라는 Command 객체에 searchCondition, searchKeyword 라는 변수와 setter 메서드가 없다면?

BoardVO를 command 객체를 사용할 수 없다.

이때, @RequestParam 을 사용하면 검색과 관련된 파라미터 정보를 추출할 수 있다. 

@RequestMapping("/getBoardList.do")
public String getBoardList( @RequestParam(value="searchCondition", defaultValue = "TITLE", required=false) String condition,
                            @RequestParam(value="searchKeyword", defaultValue = "", required=false) String keyword,
                            BoardVO vo, BoardDAO boardDao, Model model ) {
    System.out.println( "검색 조건 : " + condition );
    System.out.println( "검색 단어 : " + keyword );
    model.addAttribute("boardList", boardDao.getBoardList(vo));
    return "getBoardList.jsp";
}

 

@RequestParam에서 사용된 속성의 의미는 아래와 같다.

  • value : 화면으로부터 전달된 파라미터 이름
  • defaultValue : 화면으로부터 전달될 파라미터 정보가 없을 때, 설정할 기본값
  • required : 파라미터의 생략 여부