私は単純な春のRESTWebサービスを開発しています。私が行った調査によると、404の例外には2つのタイプがあります。例えば、
@Controller
@RequestMapping("/person")
@Transactional(readOnly=true)
public class PersonController {
@RequestMapping(value="/data", method={RequestMethod.GET,RequestMethod.POST})
@ResponseStatus(value=HttpStatus.OK)
public Person getPerson() {
return service.getPerson();
}
}
タイプ1:http://localhost/myws/person/get
Webサービスから404をスローします。
タイプ2:http://localhost/myws/idontexist
Webサーバーコンテナから404をスローします。私の場合はTomcatです。
タイプ1を処理するために、拡張DefaultHandlerExceptionResolver
とオーバーライドhandleNoSuchRequestHandlingMethod
を試みました。タイプ2を処理するために、以下のスニペットをweb.xml
<エラーページ> <エラーコード>404</エラーコード> <location> /WEB-INF/pages/notfound.jsp </ location> </エラーページ> <エラーページ> <exception-type> java.lang.Throwable </ exception-type> <location> /WEB-INF/pages/notfound.jsp </ location> </エラーページ>私のサーブレットxmlは次のようになります。
<context:component-scan base-package = "com" /> <bean class = "org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name = "ignoreAcceptHeader" value = "true" /> <property name = "order" value = "1" /> <property name = "contentNegotiationManager"> <bean class = "org.springframework.web.accept.ContentNegotiationManager"> <コンストラクター引数> <bean class = "org.springframework.web.accept.ParameterContentNegotiationStrategy"> <コンストラクター引数> <地図> <entry key = "json" value = "application / json" /> <entry key = "xml" value = "application / xml" /> </ map> </コンストラクタ-arg> </ bean> </コンストラクタ-arg> </ bean> </プロパティ> <property name = "defaultViews"> <リスト> <bean class = "org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> <bean class = "org.springframework.web.servlet.view.xml.MarshallingView"> <コンストラクター引数> <bean class = "org.springframework.oxm.xstream.XStreamMarshaller"> <property name = "autodetectAnnotations" value = "true" /> </ bean> </コンストラクタ-arg> </ bean> </ list> </プロパティ> </ bean> <bean id = "viewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name = "order" value = "2" /> <property name = "prefix"> <value> / WEB-INF / pages / </ value> </プロパティ> <property name = "suffix"> <value> .jsp </ value> </プロパティ> </ bean> <!-内部サーバーエラーを処理するには-> <bean class = "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver"> <property name = "order" value = "1" /> </ bean> <bean class = "org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver"> <property name = "order" value = "2" /> </ bean> <!-RestExceptionHandlerはDefaultHandlerExceptionResolverを拡張します-> <bean class = "com.rest.exception.RestExceptionHandler"> <property name = "order" value = "3" /> </ bean> <!-データソースとDaos ...-->
タイプ2のURLにアクセスすると、以下の例外が発生します。
WARN org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/myws/WEB-INF/pages/notfound.jsp] in DispatcherServlet with name 'restservlet'
しかし、私のJSPは上記の場所にあります。何が問題なのですか?