CodenameOne简洁REST API基于Nestoria示例编译失败求助
解决Codename One新REST API添加参数的编译错误
嘿,我来帮你搞定这个编译问题!你遇到的body(java.lang.String)错误,核心原因是误用了body()方法来传递普通键值对参数——这个方法是用来设置请求体内容(比如JSON字符串、原始文本)的,和ConnectionRequest里的addArgument()用法完全不同。
下面给你分场景说明正确的参数添加方式,还会适配Nestoria的示例修改:
一、不同请求类型的参数传递方法
1. GET请求:添加URL查询参数
对应ConnectionRequest中addArgument()在GET请求下的行为(自动拼到URL末尾),新REST API用queryParam()方法来添加:
// 构建带查询参数的GET请求 RequestBuilder rb = RequestBuilder.createGet("https://api.example.com/search") .queryParam("key1", "value1") .queryParam("key2", "value2"); // 执行请求 NetworkManager.getInstance().addToQueueAndWait(rb.build());
2. POST请求:添加表单参数
如果是POST表单提交(和ConnectionRequest的addArgument()在POST下的作用一致),用formParam()方法,它会自动把参数编码成标准的表单格式:
// 构建带表单参数的POST请求 RequestBuilder rb = RequestBuilder.createPost("https://api.example.com/submit") .formParam("username", "myUser") .formParam("password", "myPass"); // 执行请求 NetworkManager.getInstance().addToQueueAndWait(rb.build());
3. POST请求:传递JSON请求体
如果你的API要求用JSON格式的请求体,那才需要用到body()方法,但得先把键值对转换成JSON字符串:
// 先把参数转为JSON字符串 Map<String, Object> data = new HashMap<>(); data.put("key", "value"); data.put("count", 10); String jsonBody = new JSONParser().convertToJson(data); // 设置JSON请求体并指定Content-Type RequestBuilder rb = RequestBuilder.createPost("https://api.example.com/api") .body(jsonBody) .header("Content-Type", "application/json"); // 执行请求 NetworkManager.getInstance().addToQueueAndWait(rb.build());
二、适配Nestoria示例的修改
假设你原来的Nestoria代码错误地用了body()来加参数,把它改成queryParam()就可以解决编译问题了,示例代码如下:
// 正确的Nestoria API请求示例 RequestBuilder rb = RequestBuilder.createGet("https://api.nestoria.co.uk/api") .queryParam("country", "uk") .queryParam("pretty", "1") .queryParam("action", "search_listings") .queryParam("encoding", "json") .queryParam("listing_type", "buy") .queryParam("place_name", "London"); // 执行请求并处理响应 NetworkManager.getInstance().addToQueueAndWait(rb.build((json, err) -> { if (err != null) { Log.e(err); return; } // 解析JSON响应的逻辑 Map<String, Object> response = json.getAsMap("response"); // ... 后续的业务处理代码 }));
这样修改后,那个编译错误就会消失啦!
内容的提问来源于stack exchange,提问作者NvServices
相关产品推荐
相关产品推荐

