我真的是REST世界的新手,或者实际上是Java的WebApp方面的新手,所以请不要介意这是一个愚蠢的问题。 我有一个网页,按一下按钮将调用以下JS函数:
function testFunction(){
$(document).ready(function() {
$.ajax({
url: "http://localhost:8080/test/webapi/myresource",
type: 'get',
success: function (data) {
console.log(data)
}
});
});
}
上面的URL由我的OWN Web服务(在Java中)处理,即上面的GET将调用以下Web服务:
@Path("myresource")
public class MyResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return "Got it!";
}}
我在这里要做的就是不返回“ Got It”,而是要调用另一个涉及外部中断调用的javascript函数(专用于处理服务器的请求):
function externalResource() {
$(document).ready(function() {
$.ajax({
url: "any_external_rest_call",
type: 'get',
dataType: 'json',
success: function (data) {
document.getElementById('demo').innerHTML = "Perfect"
}
});
});
}
我想将数据从externalResource函数返回到getIt()最终返回到testFuntion(),我知道它是可能的,但无法在线找到许多详细信息。如果有人可以解决这个问题,那将真的很有帮助。
答案 0 :(得分:1)
您不能通过Java的REST方法调用JavaScript代码。但是,您可以使用ClientBuilder
包中的javax.ws.rs.client
。
您的方法可能如下所示:
@Path("myresource")
public class MyResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
client = ClientBuilder.newClient();
target = client.target("http://api.anotherRestService.com/details/")
return target.request(MediaType.APPLICATION_JSON)
.get();
}
}
这只是一个例子,我没有在实际环境中尝试过,但这是您可以做到的。现在,您可以使用JS方法testFunction
调用Java后端的REST方法。在REST方法getIt
中,您使用创建的客户端调用另一个rest服务。第二次rest调用的结果返回到JS方法testFunction
。
答案 1 :(得分:0)
看看他的:RestTemplate。但是,这是春天。看到您正在使用JAX-RS时,可以看看以下内容:Jersey。
您描述的流程是不可能的,但是在使用来自先前响应的响应的数据时,可以链接多个请求:
$(document).ready(function() {
$.ajax({
url: "http://localhost:8080/test/webapi/myresource1",
type: 'get',
success: function (data) {
$.ajax({
url: "http://localhost:8080/test/webapi/myresource2?id="+data.id,
type: 'get',
success: function (data) {
console.log(data)
}
});
}
});
});
答案 2 :(得分:0)
如果您希望从服务器中调用另一个URL,则将其重定向。如果您使用的是Spring框架,则下面是服务器端代码的示例。
@RequestMapping("/to-be-redirected")
public RedirectView localRedirect() {
RedirectView redirectView = new RedirectView();
redirectView.setUrl("http://www.google.com");
return redirectView;
}
正如其他人所提到的,您也可以使用Spring RestTemplate来完成此操作。