1

我使用 AJAX 检索外部系统的 JSONP 响应,但是响应被截断(由于缺乏更好的工作)。我的前端页面将对 URL 进行 AJAX 调用,我的系统将生成一个响应,该响应将添加到 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 String)如何使用,无关紧要。外部系统正在调用链接到返回字符串的此方法的 URL。

4

1 回答 1

0

我对 PrintWriter 有类似的问题:

response.getWriter().write(responseString);

在我将其更改为 OutputStream 之后:

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

有用。但我不知道为什么 PrintWriter 不起作用。

于 2022-02-03T11:22:35.370 回答