gpt4 book ai didi

java - 如何使用 REST JAX-RS 实现在满足特定条件时重定向用户?

转载 作者:行者123 更新时间:2023-12-03 23:11:35 25 4
gpt4 key购买 nike

我以前只使用 Tomcat 和 JSP 页面,我可以执行查询,然后将查询结果分配给数组或对象,然后通过响应将该数据传递到客户端。

request.setAttribute("errorMessage", "this is error!!");
request.getRequestDispatcher("report.jsp").forward(request, response);

在客户端 jsp 代码中,我可以这样做:

${errorMessage}

然后“这是错误!!”消息会出现。

我想用 REST JAX-RS GlassFish v3 做同样的事情。

    @Path("schedule/test")
@POST
@Consumes("application/x-www-form-urlencoded")
@Produces("application/vnd.ms-excel")
public Object tmpTest(String content) {
try {

//just my method to execute query and get result
Vector out = (Vector)QueryManager.executeQuery;

//if query result is empty, I want user to redirect to report.jsp page
if(out.isEmpty()) {
request.setAttribute("errorMessage", "This is error!!");
request.getRequestDispatcher("report.jsp").forward(request, response);
return null;
}
....continue code......
}

这导致了我从未见过的神秘异常。

java.lang.ClassCastException: $Proxy109 cannot be cast to org.apache.catalina.core.ApplicationHttpRequest
at org.apache.catalina.core.ApplicationHttpRequest.getRequestFacade(ApplicationHttpRequest.java:1001)
at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:472)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:379)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:336)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:314)

那么我如何才能将用户重定向到 report.jsp 并传递类似“这是错误”的消息?

客户端jsp期望error msg变量有一个值:

<b>${errorMessage}</b>

最佳答案

那不是 RESTful。你需要抛出 WebApplicationException带有特定的状态代码,以便客户端了解到底出了什么问题。例如。当它实际上是服务器的错误时:

throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);

或者毕竟是客户的错误:

throw new WebApplicationException(Response.Status.BAD_REQUEST);

另见 HTTP status code definitions概览。


您遇到的 ClassCastException 是顺便发生的,因为分派(dispatch)的 request 实际上不是 servletcontainer 提供的实现的实例(在这种特殊情况下, Tomcat 或 Tomcat-fork 之一)。毕竟,你不应该这样做。您正在开发 REST 网络服务,而不是 JSP/Servlet 网站。这是两个截然不同的世界。

关于java - 如何使用 REST JAX-RS 实现在满足特定条件时重定向用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5149827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com