当前位置: 首页 > 面试题库 >

Gwt Request构建器-如何返回响应字符串

卫阳炎
2023-03-14
问题内容

我需要实现一个调用Web服务并返回响应的函数。

我试过了

public String getFolderJson(String path) {  
           String result="initial_value";
           StringBuilder param = new StringBuilder();  
           param.append("?sessionId=").append(getSessionId());  
           param.append("&path=").append(path);  
           RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, "https://localhost/folder" + param);  
                   try {  
                        builder.sendRequest(null, new RequestCallback() {  
                        @Override  
                        public void onResponseReceived(Request request,
                                Response response) {  
                              result = response.getText();
                              System.out.println(response.getText());  
                                            //I need to return "result"   
                        }  
                        @Override  
                        public void onError(Request request, Throwable exception) {}  
                          });  
                    return result; //the result get returned before the response is recieved.So i am getting the return value "initial_value".
                   }      
                   catch (RequestException e) {}  
        return null;
    }

在调用 getFolderJson()Web服务时,将成功调用。但是result在接收到响应之前返回。因此,我正在获取重调谐器值“
initial_value”。函数
如何从响应中返回值getFolderJson()


问题答案:

GWT不支持同步Ajax,因此您必须使用异步模式对应用程序进行编码。

GWT用于执行请求的低级对象是XMLHttpRequest(旧的IE版本除外),并且GWT总是open()在async设置为true的情况下调用其方法。因此,拥有同步Ajax的唯一方法是维护自己的XMLHttpRequest.java。但是同步ajax是个坏主意,甚至jQuery也已弃用这种可能性。

因此,gwt中的正常方式应该是方法返回void,并且在响应可用时传递带有回调的附加参数以执行。

public void getFolderJson(String path, Callback<String, String> callback) {  
    RequestBuilder builder = new RequestBuilder(...);
    try {
      builder.sendRequest(null, new RequestCallback() {  
        @Override  
        public void onResponseReceived(Request request, Response response) {
          callback.onSuccess(response.getText());  
        }  
        @Override  
        public void onError(Request request, Throwable exception) {}
          callback.onFailure(exception.getMessage());  
        });
    } catch (RequestException e) {
        callback.onFailure(exception.getMessage());  
    }  
}

我宁愿为此使用gwtquery Promises语法,而不是请求构建器之一:

  Ajax.get("http://localhost/folder?sessionId=foo&path=bar")
    .done(new Function(){
      public void f() {
        String text = arguments(0);
      }
    });


 类似资料:
  • 我在Spring有Rest控制器。 控制器: 服务: 存储库: 实体: 目前当我在Postman(或浏览器)中使用方法@GetMap在获得JSON对象响应: 作为回应,我需要字符串格式的字段“id”,看起来像: 如何以字符串格式将JSON对象fielt“id”作为ObjectId返回?

  • 我试图发出一个POST(添加)请求,返回添加项的ID。ID是一个18个字符的字符串。只要字符串不超过16个字符,一切都正常。当长度为18个字符时,最后两个字符总是损坏的,因为它们默认为零。 我使用Vuejs作为前端,使用SpringBoot作为后端。我知道javascript在很长一段时间内限制了53位的精度,这就是为什么我使用字符串作为这个ID的类型。如果我试图返回一个18位的数字,而不是一个1

  • 问题内容: 将编码的字符串添加到http共振似乎将某些字符替换为!F(MISSING)。如何预防? 输出: {“ encodedText”:“ M6c8RqL61nMFy%!F(MISSING)hQmciSYrh9ZXgVFVjO”} 码: 问题答案: 您正在使用转义值“ M6c8RqL61nMFy%2FhQmciSYrh9ZXgVFVjO”作为以下行上的格式字符串: Fprintf尝试格式化动词

  • 我使用Guzzle发出一个异步请求,返回JSON。呼叫工作正常,响应正常,但是: 如果我回应- 我需要使用 JSON 来验证来自服务的响应。我该怎么做?我已经浏览了文档,但我显然错过了一些东西。 本质上类似于将json getbody输出分配给$json: 感谢任何帮助问候

  • 我制作了一个返回UserSettings对象数组的服务: 当我在URL http://localhost:8181/settings?ids=123&fields=customdata,user_id上发出GET请求时,我会得到以下信息:

  • 问题内容: 我将Spring MVC用于简单的JSON API,其基础方法如下所示。(我已经有一个直接生成JSON的服务层。) 问题是,在给定的情况下,最简单,最干净的响应HTTP 400错误的方法是什么? 我确实遇到过类似的方法: …但是我不能在这里使用它,因为我的方法的返回类型是String,而不是ResponseEntity。 问题答案: 将返回类型更改为,则可以在下面使用400 并要求正确