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