Java PrintWriter не сбрасывает полную строку

Я использую AJAX для получения ответа JSONP внешней системы, однако этот ответ (из-за отсутствия лучшей работы) усекается. Моя страница переднего плана будет выполнять AJAX-вызов URL, моя система будет генерировать ответ, который добавляется в PrintWriter, а затем очищать Printwriter. Однако возвращаемое содержимое не является полным.

PrintWriter pw = response.getWriter();
pw.write(callBackFn);
pw.write("(" + requestsJSON + ")"); 
pw.flush();
pw.close();

Обратите внимание, что ответ составляет около 120 000 символов. Я пытался найти причину отключения, но ничего подобного не нашел.

РЕДАКТИРОВАТЬ

public ActionForward getJSON(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        List requestList = RequestUtil.convertRequestsHashMapToRequestsList((HashMap)request.getSession().getServletContext().getAttribute(Constants.REQUESTS_CACHE_MAP));
        String requestsJSON = "";

        if (!requestList.isEmpty()) {
            Requests requestObj = (Requests) requestList.get(0);
            requestsJSON += "{\"key\":\"" + requestObj.getRequestId() + "\",\"value\":\"" + requestObj.getSubject() + "\"}";

            for (int i = 1; i < requestList.size(); i++) {
                requestObj = (Requests) requestList.get(i);
                requestsJSON += ",{\"key\":\"" + requestObj.getRequestId() + "\",\"value\":\"" + requestObj.getSubject() + "\"}";
            }
        }

        requestsJSON = "{\"values\":["+requestsJSON+"]}";
        String callBackFn = (String) request.getParameter("callback");

        System.out.println("#### Character length: " + (callBackFn + "(" + requestsJSON + ")").length());

        PrintWriter pw = response.getWriter();
        pw.write(callBackFn);
        pw.write("(" + requestsJSON + ")"); 
        pw.flush();
        pw.close();

        return null;
    }

ПРИМЕЧАНИЕ. Система, к которой я добавил вышеупомянутый метод, довольно старая и не поддерживается. он был создан с использованием AppFuse 1.8.2 (который использует Spring 2) и работает под управлением Java 1.4. К сожалению, система написана не очень хорошо, поэтому обновление до более поздней версии Java не вариант.

Относительно того, как используется возвращаемое содержимое (строка JSONP), которое возвращает метод, его значение не имеет. внешняя система вызывает URL, который ссылается на этот метод, который возвращает строку.

1 ответ

У меня была аналогичная проблема с PrintWriter:

      response.getWriter().write(responseString);

После того, как я изменил его на OutputStream:

      response.getOutputStream().write(responseString.getBytes("UTF-8"));
response.flushBuffer();

Оно работает. Но я не знаю, почему PrintWriter не работает.

Другие вопросы по тегам