JAVA/Spring MVC

객체로 파라미터 주입받기, Command Object 이용하기

kooby 2020. 4. 24. 10:20

저번 포스팅에서는 클라이언트가 전달하는 값을 주입받을때 데이터 한개 한개를 받을 수 있는 여러가지 방법에 대해서 알아보았다. 그러한 파라미터 데이터는 객체로써 받을 수도 있다!

 

 

 

 

1. Map으로 주입받기

 

클라이언트가 전달하는 모든 파라미터 데이터를 한번에 Map을 이용하여 전달 받을 수 있다.. 단, 동일명으로 전달 되는 2개 이상의 파라미터가 있다면 하나만 담기게 된다. 동일 명으로 전달 되는 파라미터가 2개이상이라면 List를 통해서 받아야한다.... 복잡하다. 

 

 

 

 

2. @ModelAttribute로 주입받기

 

Spring MVC에서 제공하는 @ModelAttribute에 대해서 알아보자. 

@ModelAttribute를 이용하면 파라미터를 객체로 주입받을 수 있다. 전달되는 파라미터의 이름과 동일한 프로퍼티에 자동으로 주입이 된다. 이렇게 받아온 객체를 커맨드 객체(Command Object)라고 부른다. 또한, @ModelAttribute는 생략이 가능하다.

 

 

 

BoardVO라는 POJO클래스가 위와 같이 정의 되어있다고 가정하면, @ModelAttribute BoardVo board 의 형태로 파라미터를 받아올 수 있다(@ModelAttribute는 생략이 가능하다.) 전달되는 파라미터의 이름과 같은 프로퍼티에 자동으로 주입하기 때문에 setter를 이용해 자동으로 index, title, content값이 들어갔겠고, 위와같이 출력하면 Request한 값이 정상적으로 출력되는 것을 볼 수 있었다. 

 

 

 

 

3. 커맨트객체 이용하기

 

2번과 같이 Request영역에서 요청한 데이터를 이용하여 빈을 주입하는 작업을 하였다. 우리는 빈을 주입만 하였지 Request영역으로 다시 저장하기 위하여 따로 저장하는 작업을 하지는 않았다. View단에서는 어떻게 이 빈 객체의 데이터를 이용할 수 있을까??

 

<h3> index : ${boardVO.b_index} </h3>
<h3> title : ${boardVO.b_title} </h3>
<h3> content : ${boardVO.b_content} </h3>

 

View에서는 위와같이 사용할 수 있다. JSP EL코드( ${} )를 사용하고, 빈 클래스 맨 앞 글자를 소문자로 바꾸고 프로퍼티 이름을 써주면 View에서 가져다가 쓸 수 있다.

 

View에서 가져갈 때 이름을 붙여줄 수도 있다.

public String test1(@ModelAttribute("testData") BoardVO board)

이 처럼 이름을 정해주면 ${testData.b_index}의 형태로 사용할 수 있겠다