myBaitis 3.2.2 버전 이후로 resultType에 HashMap(or Map)을 사용하거나, 전자정부 프레임워크를 사용할경우 EgovMap을 사용하게 되면 

데이터가 Null인 컬럼은 Map의 KeySet에 제외가 된다...재미 있는건...모든 row의 null컬럼이 제외 되거나 포함이 되는게 아니라,

특정 row에 null인 컬럼이 있으면 해당 컬럼만 제외가 된다는 것이다..

(sqlMapper일 경우 해당 되는데 sqlMap에서는 어떤지 모르겠다...)

이게 무슨 말이냐...예로 

 A

 가

 가

 null

 나

 null

 나

 다

 다

 다


이렇게 데이터가 있는 경우 조회를 해서 Map으로 결과를 받게 되면,

{A=가, B=가}

{A=나, C=나}

{A=다, B=다, C=다}

이렇게 아주~ 웃기는 데이터가 나오는 것이다...ㅡㅡ;;;


왜 이렇게 했는지는 모르겠지만 다행이 옵션으로 null인 컬럼도 조회 되게 제공을 하고 있다.

(나는 전자정부프레임워크를 사용하기 때문에, 전자정부프레임워크 기준임...ㅋ)


sql-mapper-config.xml 파일에 <configuration></configuration> 태그 안에다 아래 내용을 넣어 주면 된다.


<settings>

<setting name="callSettersOnNulls" value="true"/>

</settings>


다른거와 마찬가지로 반나절 삽질 한거 같다...ㅡㅡ;;; DB가 개발서버와, 운영서버, 테스트 서버로 나눠저 있다 보니...DB커넥션 정보가 잘못 된줄 알고....아놔...ㅡㅡ;;;


끝!!

전자정부프레임워크 3.6까지 json을 Return 시키기 위해 주로 사용했던 방법은

dispatcher-servlet에 custom view로 MappingJackson2JsonView 를 추가해서 소스에서는 

return new ModelAndView(ajaxMainView, resultMap); 를 해서 리턴을 시키고 있다.

하지만 전자정부프레임워크가 3.7로 업데이트가 되면서 프로젝트를 새로 생성을 하고, custom view만 추가해서 was를 구동을 하게되면

was 구동이 되면서 부터  

injection of resource dependencies failed; nested exception is java.lang.noclassdeffounderror: com/fasterxml/jackson/core/jsongenerator

어쩌구 저쩌구 블라블라블라~ 궁시렁궁시렁~ 

머 이런 에러가 난다...

(내용이 많지만 생략...)


원인을 찾아보니...의존성이 부족해서 그런거 였다...

새로생성한 프로젝트의 pom.xml에 보면 마지막에

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-core</artifactId>

    <version>2.5.1</version>

</dependency>

core만 의존성이 추가 되어 있고 databind는 빠져 있어서 그런거였다...

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-databind</artifactId>

            <version>2.5.1</version>

        </dependency>


이렇게 databind에 대한것도 추가를 해주니...깔끔하게 해결!! 

(사실 어제 오후동안 삽질 한건데...ㅡㅡ;;; 이건 비밀임..ㅋㅋ)


무튼 나처럼 전자정부프레임워크 3.7로 업데이트 하고나서 같은 증상으로 삽질하는 사람들의 정신건강에 도움이 되었음 좋겠다...

(의존성을 필요한 핵심만 추가 하다 보니 빠진거 같다...)

http://ooz.co.kr/232

Spring에서 interceptor를 사용하려면 spring 3 이상부터 사용 할 수 있는거 같다... dispatch-servlet.xml 의 선언부에는 아래처럼...해주고 사용하는 스프링의 버전에 맞게 수정을 해주면 되고...


interceptor 설정은 다시 dispatch-servlet.xml 파일에 추가를 해준다. 아래처럼...
	
	
		
			 
                        

			
                        
			
		
	
주석의 내용대로...모든 경로를 검사 하지만, exclude에 있는 경로는 검사에서 제외 하겠다는 내용임...

+ Recent posts