Java JAX-RS应用程序中未显示配置的404错误页面
我有以下问题:我创建了一个JavaWeb应用程序。此外,我还创建了一些REST端点。在web.xml中,我使用标记为404错误定义了重定向。它适用于除不存在的REST端点之外的所有地址。我实现了RestApplication类: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
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>