Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAX-RS应用程序中未显示配置的404错误页面_Java_Jax Rs - Fatal编程技术网

Java JAX-RS应用程序中未显示配置的404错误页面

Java JAX-RS应用程序中未显示配置的404错误页面,java,jax-rs,Java,Jax Rs,我有以下问题:我创建了一个JavaWeb应用程序。此外,我还创建了一些REST端点。在web.xml中,我使用标记为404错误定义了重定向。它适用于除不存在的REST端点之外的所有地址。我实现了RestApplication类: import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("rest") public class RestApplication extends

我有以下问题:我创建了一个JavaWeb应用程序。此外,我还创建了一些REST端点。在web.xml中,我使用标记为404错误定义了重定向。它适用于除不存在的REST端点之外的所有地址。我实现了RestApplication类:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("rest")
public class RestApplication extends Application {
}
还有一个端点myView:

@Path("/myView")
public class MyView {

    @GET
    @Path("/")
    public Response myViewPage() {
        //some code goes here...
    }
}
现在,当我尝试输入不存在的端点时,比如说“aaa”,即输入地址:,我得到404错误,但重定向不起作用。对于非REST地址,例如:,重定向工作正常。My web.xml如下所示:


resteasy.document.expand.entity.references
假的
面孔
javax.faces.webapp.FacesServlet
1.
面孔
*.xhtml
面孔
*.jsf
welcome.xhtml
404
/WEB-INF/errorpages/404.xhtml
限制性方法
/*
放
删除
选择权
痕迹
头

不太清楚为什么会找到rest资源,但对于使用
web.xml
和注释的复杂部署,您需要做更多的工作

您的
RestApplication
类必须扩展
javax.ws.rs.core.Application
,以定义RESTful Web服务应用程序部署的组件。有关
javax.ws.rs.core.Application
的更多详细信息,请参阅

应用程序
子类中,必须根据需要重写
getClasses()
getSingletons()
方法,以返回RESTful Web服务资源列表

比如说

@ApplicationPath("/rest")
public class RestApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(HelloResource.class);
        return s;
    }

}
web.xml
中,必须定义REST应用程序。 如果需要,可以配置多个

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0">
    <servlet>
        <!-- The servlet name is the full qualified name of your rest application it must be a subclass of java.ws.rs.Application --> 
        <servlet-name>org.example.restexample.RestApplication</servlet-name>
        <!--servlet-class is not needed -->
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <!-- As init parameter pass the full qualified name of the java.ws.rs.Application subclass --> 
            <param-value>org.example.restexample. RestApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- other servlet definitions --> 


    <--servlet mapping --> 

    <error-page>
        <error-code>404</error-code>
        <location>/NotFound.html</location>
    </error-page>
</web-app>

org.example.restexample.RestApplication
javax.ws.rs.Application
org.example.restexample。重新应用
1.
404
/NotFound.html
您可以为JaxRS应用程序指定servlet映射。如果这样做,
将优先

上面的示例返回配置的404错误页面,如果资源 请求“../rest/foo”,其中“../rest/hello”返回“hello”


上面的例子是用jersey 2.26-b03和tomcat 8.5.15测试的。

您能更详细地解释一下您的期望吗。Http状态代码404表示“未找到”。没有重定向。你想重定向谁?标准http/rest客户端在获得404状态代码时不会遵循重定向。如果要重定向客户端,则必须使用http状态码3xx。注意,您可能需要配置客户端以自动执行重定向。标准404确实不执行重定向,因此我在web.xml中添加了标记,该标记提供当客户端获得404时,他将被重定向到404.xhtml。但如果他从休息中得到404,那就没用了。。。这就是我的问题。您的应用程序既基于
web.xml
,也基于注释。您希望基于注释的部分(称为rest地址)在资源不可用的情况下返回配置的404错误页,这与重定向无关。对吗?你能用这种方式重新描述你的问题吗?您的注释(REST)部分是否适用于现有资源?是的,您是正确的。所以我要编辑我的问题。是的,注释(REST)可以在现有资源中正常工作。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0">
    <servlet>
        <!-- The servlet name is the full qualified name of your rest application it must be a subclass of java.ws.rs.Application --> 
        <servlet-name>org.example.restexample.RestApplication</servlet-name>
        <!--servlet-class is not needed -->
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <!-- As init parameter pass the full qualified name of the java.ws.rs.Application subclass --> 
            <param-value>org.example.restexample. RestApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- other servlet definitions --> 


    <--servlet mapping --> 

    <error-page>
        <error-code>404</error-code>
        <location>/NotFound.html</location>
    </error-page>
</web-app>