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

时间:2017-06-02 10:29:38

标签: java rest

我正在用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。但是我想让它为每个未实现的端点抛出。我担心这种情况无穷无尽......

2 个答案:

答案 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

选择正确的状态代码:

  • 如果在服务器上找不到资源,则应返回包含404状态代码的响应。它表示客户端错误
  • 如果您确实想表明某些内容尚未实现且无法处理请求,则应返回包含501状态代码的响应。它表示服务器错误