我正在用Java创建REST服务。我使用javax包。我有以下问题: 是否可以为未实现的端点创建类似“默认页面”的内容?即,我们假设我实现了以下端点:
本地主机:8080 /休息/ A
本地主机:8080 /休息/ B
并知道如果用户输入例如,我想要加载一些默认页面localhost:8080 / rest / c(可能有一些重定向是404错误?)。我在Google上找了类似的东西但没有成功。我不知道我能从什么开始。谢谢你的帮助!
修改
我想提一下,我试图在我的web.xml中添加如下内容:
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/errorpages/404.xhtml</location>
</error-page>
但遗憾的是我不适用于REST地址(localhost:8080 / rest / something)。但是,它适用于任何其他地址。
EDIT2:
我放了一些代码片段:
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("rest")
public class JaxRsApplication extends Application {
}
=============================================== ============
@Path("/myview")
public class MyView {
@GET
@Path("/")
public Response root() throws NotImplementedException {
throw new NotImplementedException();
}
@POST
@Path("/test")
public Response test() throws NotImplementedException {
throw new NotImplementedException();
}
}
EDIT3:
@cássio-mazzochi-molin抱歉延迟,我无法检查。但现在我已经检查了这个,我不确定这是不是我想要的。
我已经实现了EntityNotFoundExceptionMapper:
@Provider
public class EntityNotFoundExceptionMapper implements ExceptionMapper<EntityNotFoundException> {
@Override
public Response toResponse(EntityNotFoundException exception) {
return Response.status(404).entity(exception.getMessage()).type("text/plain").build();
}
}
并将其添加到应用程序中:
@ApplicationPath("rest")
public class JaxRsApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
return new HashSet<Class<?>>(Arrays.asList(EntityNotFoundExceptionMapper.class));
}
}
但是有一个问题 - 如果我想让它工作,我必须定义一个端点,让我们说“C”并抛出EntityNotFoundException。但是我想让它为每个未实现的端点抛出。我担心这种情况无穷无尽......
答案 0 :(得分:0)
在控制器中添加以下方法
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleResourceNotFoundException() {
return "page not found";
}
以及您的代码下面的课程:
public class ResourceNotFoundException extends RuntimeException { }
您可以通过在方法中指定某个模型来返回页面,而不是返回未找到页面的字符串。
答案 1 :(得分:0)
使用JAX-RS,您可以定义ExceptionMapper
以将例外映射到Response
:
@Provider
public class NotImplementedExceptionMapper
implements ExceptionMapper<NotImplementedException> {
@Override
public Response toResponse(EntityNotFoundException ex) {
String html = ...
return Response.status(501).entity(html).type(MediaType.TEXT_HTML).build();
}
}
有关在JAX-RS中处理错误的更多详细信息,请参阅此answer。
选择正确的状态代码: