앞선 버전에서는 데이터를 저장하기 위해 컨트롤러에서 ModelView 객체를 생성 후 저장할 데이터를 model 객체에 넣어 ModelView 객체를 반환하였다. 매번 컨트롤러에서 ModelView를 생성 후, 저장할 데이터를 넣기 위해 model 객체를 꺼내 데이터를 넣는 과정이 반복적으로 이루어진다.
개발자가 단순하고 편리하게 사용할 수 있도록, 프론트 컨트롤러에서 paramMap 뿐만 아니라 Model 객체를 함께 파라미터로 넘겨준 후, ModelView를 반환받는 것이 아니라 뷰의 이름만 반환해주도록 코드를 변경해 보겠다.
■ ControllerV4 Interface
- process() 메서드의 파라미터에 paramMap뿐만 아니라 데이터를 저장할 수 있는 model 객체도 함께 넘겨준다. - paramMap과 model은 FrontController에서 넘겨주게 된다.
- FrontController에서 넘겨받은 model 객체에 저장된 회원의 정보를 put하는 것을 확인 할 수 있다. - 반환되는 값은 논리적인 뷰 이름이다. - FrontController에서 viewResolver에 의해 물리적인 주소를 가진 뷰 이름으로 변경된다.
import hello.servlet.domain.member.Member;
import hello.servlet.domain.member.MemberRepository;
import hello.servlet.web.frontcontroller.v4.ControllerV4;
import java.util.Map;
public class MemberSaveControllerV4 implements ControllerV4 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
public String process(Map<String, String> paramMap, Map<String, Object> model) {
String username = paramMap.get("username");
int age = Integer.parseInt(paramMap.get("age"));
Member member = new Member(username, age);
memberRepository.save(member);
// 파라미터로 전달받은 model 객체에 데이터를 저장
model.put("member", member);
return "save-result";
}
}