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