Clean Code that Works.

이전 포스팅에서 커스텀 컨버터를 등록 하는 방법을 알아 봤다.

하지만 이 경우는 <mvc:anontation-driven>을 사용할때만 가능 하다.
봄싹에서는 위 방식을 사용하지 않고, 수동으로 지정 하여 사용한다.

근데 내가 <mvc:anontation-driven>을 예전에 적용해 볼려고 하다가, 설정파일에 적어놓고 삭제하지 않고 commit 되어 봄싹 서버에도 올라가서 사용되고 있었다.
오마이갓. @_@;;;

하여 저것을 삭제 하고, 다시 컨버전 서비스를 적용할 방법을 생각해 봐야 했는데..
토비님 글을 보면 자세히 설명이 되어 있다. http://toby.epril.com/?p=989

글을 잘 읽어 보면...
<mvc:annotation-driven>이 등록해주는 빈이 한가지 더 있다. 바로 MappedInterceptor이다. 정확히 말하자면 모든 경로에 대해서 적용되는 ConversionServiceExposingInterceptor를 가진 MappedInterceptor이다.

그렇다. 봄싹에는 ConversionServiceExposingInterceptor가 등록 되어 있지 않아서, 커스텀 컨버터가 적용 되지 않고 있었던 것이다. 그럼 어디에다가 interceptor를 등록 해야 할 까?

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:order="0">
        <property name="interceptors">
            <list>
                <bean class="org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor" >
                    <constructor-arg ref="conversionService"/>
                </bean>
            </list>
        </property>
    </bean>

이런 형식으로 interceptor를 등록 하면 된다.
url 요청에 따라 인터셉터를 적용하고 싶으면 MappedInterceptro를 만들어서 DefaultAnnotationHandlerMapping의 프로퍼티로 해서 추가 하면 된다.