2

我正在开发一个简单的 Spring REST Web 服务。根据我所做的研究,可能有两种类型的 404 异常。例如,

@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>
    </错误页面>
我的 servlet 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"/>
                            </地图>
                        </constructor-arg>
                    </豆>
                </constructor-arg>
            </豆>
        </属性>
        <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"/>
                        </豆>
                    </constructor-arg>
                </豆>
            </列表>
        </属性>
    </豆>

    <bean id="viewResolver"
              class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
              <property name="order" value="2" />
              <属性名称="前缀">
                  <value>/WEB-INF/pages/</value>
               </属性>
              <属性名称="后缀">
                 <value>.jsp</value>
              </属性>
        </豆>
    <!--处理内部服务器错误-->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver">
        <property name="order" value="1"/>
    </豆>
    <bean class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver" >
        <property name="order" value="2"/>
    </豆>
    <!--RestExceptionHandler 扩展 DefaultHandlerExceptionResolver -->
    <bean class="com.rest.exception.RestExceptionHandler">
        <property name="order" value="3"/>
    </豆>   
    <!-- 数据源和 Daos...-->

当我点击 Type 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

这就是我所做的。我创建了一个controller来处理 404,而不是JSP因为我无法解决 JSP 的问题。它按预期工作。

于 2013-02-04T07:26:36.527 回答