Codenameone 代码名1-对RESTfull服务器的简单请求

Codenameone 代码名1-对RESTfull服务器的简单请求,codenameone,Codenameone,我与Postman一起测试,如果我向http://localhost:8080/app标题为Content Type=application/json,正文为{“appName”:“Fake app(用于测试)”}。此调用的响应是一个简单的随机字符串,状态为“200OK”。我试图用Codename One复制相同的请求,但没有成功,我得到一个对话框错误,文本为400:null。以下代码中有什么错误 public static void registerApp() { Connec

我与Postman一起测试,如果我向
http://localhost:8080/app
标题为
Content Type=application/json
,正文为
{“appName”:“Fake app(用于测试)”}
。此调用的响应是一个简单的随机字符串,状态为“200OK”。我试图用Codename One复制相同的请求,但没有成功,我得到一个对话框错误,文本为
400:null
。以下代码中有什么错误

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);
}
我还需要对服务器返回的随机字符串执行一些操作(如果成功),但我不知道如何获取该字符串


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();
响应结果=
Rest.put(url)。
jsonContent()。
正文(“{'appName':'Fake app(用于测试)}”).getAsString();

参见

谢谢,我按照你的建议与其他同学一起解决了问题。请注意,我不能使用像在
“{'appName':
中那样的单引号,因为我得到了错误:
{“status”:400,“error:“Bad Request”,“exception:”org.springframework.http.converter.httpmessagenetradableexception”,“message:”JSON解析错误:意外字符(“”(代码39)):应以双引号开始字段名;嵌套异常为com.fasterxml.jackson.core.JsonParseException:意外字符(“”(代码39)):应以双引号开始字段名}