如何从ResourceMapping转发到同一服务器上的新URL?

时间:2014-03-11 16:19:47

标签: java spring servlets portlet

我的portlet控制器响应映射定义如下:

@ResourceMapping("create")
public String create(ResourceRequest request, ResourceResponse response){

    return "test"

}

我正在尝试使用以下方法向单独的服务提出新请求:

@ResourceMapping("create")
public String create(ResourceRequest request, ResourceResponse response){

    new HttpGet("/path-to-my-service/myService");

    return "test"

}

没有显示错误,但我认为没有正确调用Get请求,因为我没有访问权限 到serice所在的域名。可以使用ResourceRequest / ResourceResponse访问它吗? 看看这个obj的属性这些属性似乎不可用。我还可以尝试调用Get请求吗?

我可以通过提供完整路径让它在浏览器上运行:

http://localhost:8080/path-to-my-service/myService但我需要在@ResourceMapping中解析服务的域名吗?

1 个答案:

答案 0 :(得分:0)

  

不显示错误

不应该,这段代码什么也不做

new HttpGet("/path-to-my-service/myService");

我想您尝试使用http客户端调用外部服务,您必须提供完整的http调用代码才能获得它

thopthing like this,http client 4.3

的例子
    public static String executeGet(String url) {

        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resp = null;  
        try {

            HttpGet httpGet = new HttpGet(url);
            response = httpClient.execute(httpGet);

            int code = response.getStatusLine().getStatusCode();
            if (code == HttpURLConnection.HTTP_OK) {
                resp = EntityUtils.toString(response.getEntity());
            } else {
                // handle wrong response here
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (response != null) {
                close(response);
            }
        }
        return resp;
}

您应该为此方法提供完整的网址,这意味着您应该知道主机名。如果您知道您的portlet和服务在同一主机上,您可以从ServletRequest获取主机名,则每个门户实现都提供从PorteltRequest获取HttpServletRequest的方法