[web] Spring – Could not resolve view with name

org.springframework.web.accept.ContentNegotiationManagerFactoryBean 을 사용하여 mimeType을 자동으로 지정할 때 주의할 점이 있다.

바로 API extension을 어떻게 할 것인지인데

host/path/api.in

servlet.xml에 mimeType extension에 대한 pattern을 지정하지 않으면 Tomcat에 있는 web.xml의 mimeType 을 applicationContext.getMimeType 메서드를 이용해서 가져오게 된다.

tomcat 7에서 in 에 대한 contentType이 text/plain을 반환하여 JSP view 를 반환하지 못하여 장애로 이어질 수 있다. JSP는 mimeType이 text/html 이다.

웬만하면 well known extension으로 활용해야지 언어코드와 같은 것으로 확장자를 설계하면 피를 볼 수 있다. 잘 알지 못하면 사용하지 말자.

ServletException이 발생한 케이스이다.

call API : host/path/api.in

API extension : in

catalina/web.xml -> mimeType “in” : text/plain

JSP로 반환 해야 하는데 text/html이 아니라 text/plain으로 떨어져 dispatcherServlet에서 올바른 view를 반환하지 못한다.

에러 메시지 :

Could not resolve view with name ‘path/api’ in servlet with name ‘myServlet’

자 다시한번 따라 읽어봅니다.

“잘 모르면 사용하지 말자.”

이 원인을 알게 된 것도 잘 모르고 사용 하다가 발생한 케이스다.

@ 해결 방법을 첨부 하자면

extension을 사용하는 API는 deprecated처리하고

기존에 유입되던 traffic은 신규 API주소로 redirect처리 하였다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중