[게시판 만들기] 3-6. Spring 게시판을 위한 HandlerMethodArgumentResolver
HandlerMethodArgumentResolver 란?
View 페이지에서 Controller 로 데이터를 전달하기 전 파라메터를 커스터마이징 할 수 있게한느 인터페이스로 webArgumentResolver 였으나, Spring 3.X버전부터는 HandlerMethodArgumentResolver로 변경되었습니다.
스프링에서 제공하는 인터페이스로 , Controller 로 전달되는 파라메터(데이터)가 먼저 수정 및 가공이 이뤄집니다.
데이터를 전달하는 방법으로는 대표적으로 DTO(VO) 혹은 HashMap이 존재하는데 HandlerMethodArgumentResolver 는 HashMap으로 데이터를 가공해서 받을때 많이 사용하는 것으로 보입니다.
DTO(VO) 를 사용하면 DB 테이블의 컬럼과 일치하게 생성하지만, SI 환경에서는 흔하게 비즈니스 로직 혹은 컬럼이 변경됨으로 HashMap을 선호하는 개발자도 있기 떄문에 두 가지 방법을 알아두는 것이 좋습니다.
1. HandlerMethodArgumentResolver의 생성
HandlerMethodArgumentResolver를 구현하기 위해 Implements 를 사용하면 supportsParameter 와 resolveArgument를 재 정의해서사용해야합니다.
resolveArgument 는 파라메터를 원하는 형태로 가공한 뒤 Controller로 반환해줍니다.
supportsParameter는 파라메터가 해당 클래스에 적용 가능한지 여부를 판단하는 역활을 합니다.
HandlerMethodArgumentResolver 적용 후 진행 순서
jsp -> HandlerInterceptor -> HandlerMethodArgumentResolver -> Controller -> Model -> jsp
2. CustomMap 생성
자바에서 제공하는 Map 중 HashMap을 생성하여 , 키값을 호출하면 그에따른 Value가 호출되는 형태의 CustomMap을 생성합니다.
3. CustomMapArgumentResolver 등록
스프링으로 webMVC 프로젝트를 진행할때 각종 어노테이션을 지원하는 , <mvc:annotation-driven/> 이 선언되어있습니다.
해당 부분에 <Argument-Resolvers>를 통해 해당 파라메터(@RequestParam)가 전달되면 작동을 할 빈을 등록합니다.
참고사항으로는 <message-Converters> @ResponseBody 어노테이션 HTTP 요청이나 응답을 메세지로 변환해줍니다.
<Return-Value-Handler>는 리턴타입이나 리턴된 데이터에 따라서 내가 원하는 View로 보내는 역활을 합니다.
4. 테스트를 위한 Controller 수정
Argument-Resolver를 생성할때, Map 안에 Key와 Value를 담기도록 생성하였습니다.
Controller에서는 이를 반복문을 돌면서 들어오는 파라메터 값을 로그에 남길 수 있도록 연습용으로 생성해 줍니다.
프로젝트를 실행한 뒤 , URL창에 GET 방식으로 데이터를 전달하면 Console 창에 정상적으로 값이 전달된 것을 확인할 수 있습니다.
테스트 URL - http://localhost:8090/board/callMapArgumentResolver?AA=Avalue&BB=Bvalue