当前位置: 首页 > 知识库问答 >
问题:

Spring RESTful web服务未映射URI异常处理

万俟沛
2023-03-14

我正在开发一个简单的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/idontext将从web服务器容器抛出404。在我的情况下,它是Tomcat。

为了处理类型1,我尝试扩展DefaultHandlerExceptionResolver并重写HandlenosuchRequestHandlingMethod
以处理类型2,我在web.xml中添加了以下代码段

<error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/pages/notfound.jsp</location>
    </error-page>
    <error-page> 
        <exception-type>java.lang.Throwable</exception-type> 
        <location>/WEB-INF/pages/notfound.jsp</location> 
    </error-page>

    <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">
                <constructor-arg>         
                    <bean class="org.springframework.web.accept.ParameterContentNegotiationStrategy">
                        <constructor-arg>
                            <map>
                                <entry key="json" value="application/json"/>
                                <entry key="xml" value="application/xml"/>
                            </map>
                        </constructor-arg>
                    </bean>
                </constructor-arg>
            </bean>
        </property>
        <property name="defaultViews">
            <list>

                <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
                <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                    <constructor-arg>
                        <bean class="org.springframework.oxm.xstream.XStreamMarshaller">
                            <property name="autodetectAnnotations" value="true"/>
                        </bean>
                    </constructor-arg>
                </bean>
            </list>
        </property> 
    </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>
              <property name="suffix">
                 <value>.jsp</value>
              </property>
        </bean>
    <!--To handle Internal Server Errors -->
    <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 extends DefaultHandlerExceptionResolver -->
    <bean class="com.rest.exception.RestExceptionHandler">
        <property name="order" value="3"/>
    </bean>   
    <!-- data source and Daos...-->

当我点击Type2 URL时,我会得到下面的异常。警告org.springframework.web.servlet.pagenotfound-在名为“restservlet”的DispatcherServlet中未找到URI为[/myws/WEB-INF/pages/notfound.jsp]的HTTP请求映射

但是我的JSP就在上面提到的位置。会有什么问题?

共有1个答案

徐嘉谊
2023-03-14

我就是这么做的。我创建了一个控制器来处理404,而不是JSP,因为我无法解决JSP的问题。它像预期的那样工作。

 类似资料:
  • 我想映射类主题到主题表。 主题。JAVA 主题。哈佛商学院。xml 冬眠cfg。xml 我正在读取csv文件的内容,并希望使用以下代码将其插入数据库。 管理ata.java 我得到以下错误 线程“main”组织中出现异常。冬眠MappingException:未知实体:组织中的主题。冬眠impl。SessionFactoryImpl。getEntityPersister(SessionFactor

  • 我有一个资源类,它本身与内部服务进行对话。此资源充当服务的rest API。服务层可以抛出意外异常,因此资源应该处理那些已处理的意外异常并将其记录下来。我正在使用dropwizard框架,它反过来又使用jersey。事情是这样的。 这里的问题是,我必须对每个REST apiendpoint执行完全相同的异常处理。我可以为这个特定的资源进行某种类型的异常映射,以便将所有的处理逻辑和日志记录放在那里吗

  • 我正在努力使用Java Spring Hibernate,我正在尝试实现Oauth2,在通过@ManyToMany将表用户连接到角色时,我不断遇到错误。我已经阅读了所有关于我的问题的答案,无论我尝试什么,我仍然得到了一个组织。冬眠映射异常。 以下是我正在努力做的事情的全部细节。 数据库结构 角色。JAVA 使用者JAVA 依赖性 问题: org.springframework.beans.fact

  • 我正在使用quarkus版本,需要知道如何处理未知endpoint。当我试图命中尚未实现的endpoint时,它只会发送,而不是我希望实现的异常。我无法找到相同的实现。有人能帮我做这个吗?

  • 首先,我对这个问题太长表示最诚挚的歉意,但老实说,我不知道如何缩短它,因为每个部分都是一个特例。诚然,我可能对此视而不见,因为我已经把头撞到墙上好几天了,我开始绝望了。 我向所有通读这本书的人表示最大的尊重和感谢。 我希望能够通过使用Jersey ExceptionMapers将Shiro的AuthenticationException及其子类映射到JAX-RS响应,Jersey例外映射器是使用G

  • 是否强制将我的外键实体从ClassA映射到ClassB中的主实体?