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-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>
<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>
<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>
댓글
댓글 쓰기