You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:48:36