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

我曾经只使用可以执行查询的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期望错误msg变量具有一个值:

<b>${errorMessage}</b>

回答:

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

WebApplicationException

throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);

还是毕竟是客户的错误:

throw new WebApplicationException(Response.Status.BAD_REQUEST);

在ClassCastException你面对的是由发生,因为这样

的出动request实际上不是servletcontainer-的实例

提供的实现(在这种特殊情况下,Tomcat的的一个或一个

Tomcat的叉)。毕竟,您不应该这样做。您正在开发

REST Web服务,而不是JSP / Servlet网站。这是两个不同的世界。

以上是 使用REST JAX-RS实现满足特定条件时如何重定向用户? 的全部内容, 来源链接: utcz.com/qa/404550.html

回到顶部