【问题标题】:Handling un-mapped Rest path处理未映射的 Rest 路径
【发布时间】:2013-03-30 06:36:08
【问题描述】:

这是我当前的 Guice 配置:

public class MyServletModule extends ServletModule {
    @Override
    protected void configureServlets() {
        bind(MyRest.class);
        serveRegex(".+(?<!\\.(html|css|png|jpg))")
               .with(HttpServletDispatcher.class);
    }
}

但是我希望我的 Rest 资源只能以 http://127.0.0.1:8888/{hashcode_or_filename} 的形式访问,并且是唯一接受和处理的形式(好吧,加上下面的 /create 方法)。

现在,我可以在这个路径模式中正确处理哈希码和文件名。

但是我不确定如何处理下面的类型或场景,客户端请求未映射的路径,在我的情况下返回:

找不到相对资源:/examples/foo 的完整路径: http://127.0.0.1:8888/examples/foo

找不到相关资源:/examples/bar/foo of full 路径:http://127.0.0.1:8888/examples/bar/foo

我需要的是能够处理未映射的路径,这样我就可以返回错误的 HTML 页面或其他内容,而不是在浏览器中显示这些错误文本。

如果请求是:http://127.0.0.1:8888/ 我需要自动转发到http://127.0.0.1:8888/index.html。现在我必须手动将 index.html 放在尾部。

我的 Resteasy 资源仅配置或连接:

@Singleton
@Path("/")
public class MyRest {
    @GET
    @Path({hashcode})
    public Response getSomething(...){}

    @POST
    @Path("create")
    public Response createSomething(...){}
}

【问题讨论】:

    标签: java regex servlets jax-rs guice


    【解决方案1】:

    最简单的方法是注册过滤器来处理错误代码不是 200(OK)的响应。或添加到您的 web.xml 中,如下所示:

    <error-page>
        <error-code>404</error-code>
        <location>/ErrorPage.jsp</location>
    </error-page> 
    

    另外如果请求是:http://127.0.0.1:8888/我需要转发到 http://127.0.0.1:8888/index.html 自动。现在我必须 手动将 index.html 放在尾部。

    你可以使用这个模块http://tuckey.org/urlrewrite/

    WEB-INF/web.xml

    <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
        <init-param>
            <param-name>confPath</param-name>
            <param-value>/WEB-INF/urlrewrite.xml</param-value>
        </init-param>
        <!--...omitted...-->
    </filter>
    
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    

    WEB-INF/urlrewrite.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE urlrewrite
            PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
            "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
    <urlrewrite>
        <rule match-type="regex">
            <from>^/$</from>
            <to type="redirect">/index.html</to>
        </rule>
    </urlrewrite>
    

    【讨论】:

      猜你喜欢
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多