私は単純な春の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/getWebサービスから404をスローします。
タイプ2:http://localhost/myws/idontexistWebサーバーコンテナから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は上記の場所にあります。何が問題なのですか?