Раньше я просто использовал страницы 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 error будет иметь значение:
<b>${errorMessage}</b>