如何从resourcemapping转发到同一服务器上的新url?

hi3rlvi2  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(377)

我有如下定义的portlet控制器响应Map:

@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请求没有被正确调用,因为我没有访问服务所在的域名的权限。是否可以使用resourcerequest/resourceresponse访问它?看看这个对象的属性,这些属性似乎不可用。我是否可以尝试调用get请求?
我可以通过提供完整的路径在浏览器上实现这一点: http://localhost:8080/path-to-my-service/myService 但是我需要从@resourcemapping中解析服务的域?

kmbjn2e3

kmbjn2e31#

不显示错误
不应该,这个代码什么都不做

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

我假设您试图用http客户机调用外部服务,您必须提供完整的http调用代码才能得到它
例如,http客户机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;
}

您应该提供此方法的完整url,这意味着您应该知道主机名。如果您知道您的portlet和服务位于同一主机上,您可以从servletrequest获取主机名,那么每个门户实现都提供了从porteltrequest获取httpservletrequest的方法

相关问题