使用Spring和App Engine任务队列处理非英语URL

时间:2013-05-20 08:18:00

标签: java spring google-app-engine spring-mvc task-queue

我遇到此问题,我需要使用TaskQueue排队页面链接:

        Queue queue = QueueFactory.getDefaultQueue();
        for (String href : hrefs){
            href = baseUrl + href;
            pageLinks = pageLinks + "\n" + href;
            queue.add(TaskOptions.Builder
                .withUrl("/crawler")
                .param("url", href));
          l("Added to queue url=["+href+"]");               
        }

这里的问题是,我认为传入队列的URL包含?的阿拉伯字符。因为它一直在重新安排。

然而,字符串pageLinks在浏览器中通过Spring MVC输出,我可以正确地看到正在显示的阿拉伯字符。所以我很好,链接还可以。

如果我复制浏览器上的其中一个链接输出,并将其粘贴到浏览器URL,则可以正常工作。所以我很确定队列因为获取错误的URL而继续进行调度的原因。

我在这里可以缺少什么?在将String href传递到队列之前是否需要转换它?

抓取服务如下所示:

@RequestMapping(method = RequestMethod.GET, value = "/crawl",
produces = "application/json; charset=iso-8859-6")
public @ResponseBody String crawl(HttpServletRequest req, HttpServletResponse res,
            @RequestParam(value="url", required = false) String url) {
        l("Processs url:" + url);
}

此外,我还需要将@QueryParam字符串url转换为阿拉伯语吗?

1 个答案:

答案 0 :(得分:1)

您必须Url-encode参数。请参阅此问题:Java URL encoding of query string parameters