我的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中解析服务的域名吗?
答案 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的方法