Web Programming/Project

[게시판 만들기] 3-6. Spring 게시판을 위한 HandlerMethodArgumentResolver

유가엘 2020. 4. 24. 18:17

lesson07_Spring_Board.zip
0.04MB

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