Spring with Jsonp

이슈 상황
1. spring mvc를 이용하여 이미 controller는 작성된 상태이다.
2. 해당 controller는 @ResponseBody를 이용하여 작성되었다.
3. 모바일 웹(웹 서버와 다른 호스트) 을 이용하여 특정 url의 json을 가져 와야 한다. (JSONP 사용)
4. 특정 url는 확장자가 없다. (=_=;; restful도 아닌데.. 확장자 지정을 안했다.)

개선 방법
controller는 건들지 않는 방법이 좋을 듯 했다. Controller에 대한 exception 처리도 있고. 고쳐야 될 부분이 많다.

처리 
1. intercepter로 response를 수정하려 하였지만.. @ResponseBody인 경우 intercepter로 처리 할 수 없다. (실패)
2. MessageConverter 중 MappingJacksonHttpMessageConverter를 확장. 그러나 본인은 MappingJackson2HttpMessageConverter 사용하였고 이 클래스 에서는 멤버변수의 접근 제어가 MappingJacksonHttpMessageConverter와 달라서 적용이 안된다. (실패)
(예제 : http://aircook.tistory.com/106  MappingJacksonHttpMessageConverter의 확장 통한 jsonp 구현)
3. Servlet Filter를 이용한 처리(성공)


추가 이슈 
1. Filter가 적용 안됨
<<문제의 filter 구문>>
<filter>
         <filter-name>jsonCallbackFilter</filter-name>
         <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
         <filter-name>jsonCallbackFilter</filter-name>
         <url-pattern>/</url-pattern>
</filter-mapping>

처리 
1. url-pattern이 문제였음.
 dispatcherServlet을 이용하는 경우 filter를 적용하게끔 수정함.

<<수정된 filter 구문>>
<filter>
         <filter-name>jsonCallbackFilter</filter-name>
         <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
         <filter-name>jsonCallbackFilter</filter-name>
         <servlet-name>dispatcherServlet</servlet-name>
</filter-mapping>




 

 

댓글

이 블로그의 인기 게시물

Spring Batch - JobParameters Default Value 만들기

Hsqldb Server 재기동 시 오류