2

私は単純な春の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は上記の場所にあります。何が問題なのですか?

4

1 に答える 1

0

これが私がしたことです。JSPで問題が発生しなかったため、controller代わりに404を処理するためにを作成しました。JSP期待どおりに動作します。

于 2013-02-04T07:26:36.527 に答える