当前位置: 首页 > 面试题库 >

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

拓拔谭三
2023-03-14
问题内容

我曾经只使用可以执行查询的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);

另请参见HTTP状态代码定义以获取概述。

ClassCastException你面对的是由发生,因为派遣的方式request其实不是servletcontainer提供的实现的实例(在这种特殊情况下,Tomcat的的一个或一个Tomcat叉)。毕竟,您不应该这样做。您正在开发REST
Web服务,而不是JSP / Servlet网站。这是两个不同的世界。



 类似资料:
  • 问题内容: 我有一个jtable。(表格摘要)。其中一列是EXPIRY。我想用当前日期已经过期的客户端突出显示该行。 我已经掌握了逻辑,但是我无法使行变成红色或任何其他颜色。这是我的代码: 谁能帮我这个?因为它是我界面的主要亮点之一。提前致谢 !!:) 问题答案: 在以下链接中,您可以找到要执行的操作的示例:http : //www.roseindia.net/java/example/java/

  • 我有一个网页(我是php初学者,只有1.5个月的书籍例子),允许用户输入一个gpa,然后搜索符合最低输入的学生。当单击search按钮时,它从php文件中调用一个函数来查询数据库。我的代码几乎正常工作。问题是它是返回所有的学生,我想返回只行符合最低gpa输入。尝试使用HAVING子句和其他子句,但仍然没有返回我想要的内容。谢谢! sql Fiddle链接:http://www.sqlfiddle.

  • 每个代理都有一个私有布尔变量“Happy?”。如何用[Happy?=True]计算特工人数? 就餐时有没有直接的方法?或者我遍历了所有的代理,然后逐个计算? 更新: 我尝试过全局调度方法:https://repast.github.io/docs/RepastReference/RepastReference.html#schedule-全球的 当我使用ContextBuilder中的@schdu

  • 问题内容: 我有一个包含ID,WorkerID,IsActive标志(1或0)和LocalTime的表。每次工作人员处于活动状态或不活动状态时,都会使用WorkerID,1或0标志记录以及一个时间(LocalTime)创建一条记录。 我想插入一个新表中:从该表中,对于每个唯一的WorkerID,仅当该记录的IsActive标志为1时,才为该唯一的WorkerID选择具有最新LocalTime的记录

  • 我有一些预定的任务: 这就是我想要的样子。网络上有一些解决方案,但它们似乎都相当复杂,对我来说不太管用,而这似乎是一个相当常见的问题。

  • 我尝试在包含带有注释的对象列表的列表上应用自定义序列化程序。如果未授予用户权限(角色与用户不同),我想删除这些属性。当属性不是列表时,它工作得很好(https://www.baeldung.com/jackson-serialize-field-custom-criteria) **更新** 我的第一个方法是为mapper注册一个新模块 和我的自定义序列化程序 但我无法访问列表中包含的对象。我想定