使用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