Java 未实现的REST端点的默认页面?

Java 未实现的REST端点的默认页面?,java,rest,Java,Rest,我正在用Java创建一个REST服务。我使用javax包。我有以下问题: 是否可以为未实现的端点创建类似“默认页面”的内容?也就是说,假设我实现了以下端点: 本地主机:8080/rest/a 本地主机:8080/rest/b 如果用户输入localhost:8080/rest/c(可能是404错误的重定向),我希望加载一些默认页面。我在谷歌上寻找类似的东西,但没有成功。我不知道我可以从什么开始。谢谢你的帮助 编辑: 我想提及的是,我试图向web.xml中添加如下内容: 404 /WEB-INF

我正在用Java创建一个REST服务。我使用javax包。我有以下问题: 是否可以为未实现的端点创建类似“默认页面”的内容?也就是说,假设我实现了以下端点:

本地主机:8080/rest/a

本地主机:8080/rest/b

如果用户输入localhost:8080/rest/c(可能是404错误的重定向),我希望加载一些默认页面。我在谷歌上寻找类似的东西,但没有成功。我不知道我可以从什么开始。谢谢你的帮助

编辑:

我想提及的是,我试图向web.xml中添加如下内容:


404
/WEB-INF/errorpages/404.xhtml
但不幸的是,我不支持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();
    }
}
@Provider
公共类EntityNotFoundExceptionMapper实现ExceptionMapper{
@凌驾
公共响应(EntityNotFoundException异常){
返回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));
    }
}
@ApplicationPath(“rest”)
公共类JAXSApplication扩展了应用程序{
@凌驾
公共集>(Arrays.asList(EntityNotFoundExceptionMapper.class));
}
}

但有一个问题——如果我想让它工作,我必须定义一个端点,比如说“C”,然后抛出EntityNotFoundException。但我希望为每个未实现的端点抛出它。恐怕这种情况有无限多…

在控制器中添加以下方法

@ExceptionHandler(ResourceNotFoundException.class)
        @ResponseStatus(HttpStatus.NOT_FOUND)
        public String handleResourceNotFoundException() {
            return "page not found";
        }
和下面的类添加到您的代码:

public class ResourceNotFoundException extends RuntimeException { }

您可以通过在方法中指定某个模型来返回页面,而不是返回page not found字符串。

使用JAX-RS,您可以定义一个来将异常映射到:

@Provider
公共类NotImplementedExceptionMapper
实现ExceptionMapper{
@凌驾
公众响应(EntityNotFoundException ex){
字符串html=。。。
返回Response.status(501).entity(html).type(MediaType.TEXT_html).build();
}
}
有关JAX-RS中错误处理的更多详细信息,请参阅本文


选择正确的状态代码:

  • 如果在服务器上找不到资源,则应返回带有状态代码的响应。它表示客户端错误
  • 如果您真的想要指出某些东西尚未实现,并且请求无法处理,那么您应该返回一个带有状态代码的响应。它表示服务器错误

您能分享一些代码吗?如果在服务器上找不到资源,则应返回带有
404
状态代码和描述错误的有效负载的响应。如果您真的想指出某些东西尚未实现,并且请求无法处理,那么您应该返回一个带有
501
状态代码的响应。你是说JAX-RS和它的一个实现吗?是的,我使用我添加了一些代码片段。请参阅。关于OP使用的框架,问题相当广泛。你不应该假设OP使用的是Spring。不幸的是,我没有使用Spring。OP没有回答你的问题。你能分享一些代码吗?他/她可能认为我们了解代码。所以我假设他用的是这样的东西D.和平@谢谢你。但据我所知,我必须将这个实现映射到定义的端点,不是吗?我希望对每个未实现的端点执行此代码。@user2905035查看我的更新答案
例外apper
就是您要找的。它允许您将异常映射到
响应