我如何从Web服务中调用Web服务

时间:2018-07-16 14:59:39

标签: javascript java

我真的是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(),我知道它是可能的,但无法在线找到许多详细信息。如果有人可以解决这个问题,那将真的很有帮助。

3 个答案:

答案 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来完成此操作。