Codename One - 对RESTfull服务器的简单请求

时间:2017-12-23 00:52:43

标签: codenameone

我向Postman测试过,如果我向http://localhost:8080/app发送带有标头Content-Type = application/json和正文{"appName": "Fake app (for testing)"}的PUT请求,我的Spring Boot RESTfull API可以正常工作。此调用的响应是一个简单的随机字符串,状态为“200 OK”。我尝试使用Codename One复制相同的请求但没有成功,我收到带有文本400: null的Dialog错误。以下代码有什么问题?

public static void registerApp() {
        ConnectionRequest request = new ConnectionRequest();
        request.setContentType("application/json");
        request.setUrl("http://localhost:8080/app");
        request.setHttpMethod("PUT");

        String appName = Display.getInstance().getProperty("AppName", "");

        request.addArgument("appName", appName);

        request.addResponseListener((e) -> {
            Log.p("App registered");
        });

        // request will be handled asynchronously
        NetworkManager.getInstance().addToQueue(request);
}

我还需要对服务器返回的随机字符串进行一些操作(成功时),但我不知道如何获取该字符串。

enter image description here

1 个答案:

答案 0 :(得分:1)

addArgument使用表单提交中使用的标准HTTP参数而不是JSON参数,因此您获得的内容(您可以在网络监视工具中看到)在正文中是appName=appName

您可以使用:

request.setRequestBody("{\"appName\": \"Fake app (for testing)\"}");

或更简单:

request.setRequestBody("{'appName': 'Fake app (for testing)'}");

就个人而言,我一直倾向于使用较新的Rest API,您可以这样使用:

Response<String> result = 
    Rest.put(url).
    jsonContent().
    body("{'appName': 'Fake app (for testing)'}").getAsString();

请参阅https://www.codenameone.com/blog/terse-rest-api.html