HarmonyOS鸿蒙Next中RCP发送的post请求,参数怎么传不过去

HarmonyOS鸿蒙Next中RCP发送的post请求,参数怎么传不过去 手机应用通过如下方式发送post请求:

const postContent: Params = {"name":"john","age":33};
const session = rcp.createSession();
session.post(url, postContent)
  .then((response) => {
    console.info(`Response succeeded: ${JSON.stringify(response.headers)}`);
    console.info(`Response succeeded: ${JSON.stringify(response.statusCode)}`);
    console.info(`Response succeeded: ${JSON.stringify(postContent)}`);
    })
    .catch((err: BusinessError) => {
      console.error(`Response err: Code is ${JSON.stringify(err.code)}, message is ${JSON.stringify(err)}`);
    });

如下服务端能接收到应用发来的请求,但是name和age却为空值

@PostMapping(@"/userInfo")
@ResponseBody
public AjaxResult userInfo((HttpServletRequest request, String name, string age) {
  ......
}

如上,怎么才能把参数传过去呢?


更多关于HarmonyOS鸿蒙Next中RCP发送的post请求,参数怎么传不过去的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

需要确认一下服务端接收的参数类型是否为form-data?

若是form-data,则尝试将参数按如下方式定义

const postContent = new rcp.Form({
            'name': 'john',
            'age': 33
          })

RequestContent的定义:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/remote-communication-rcp#section18971142565016

更多关于HarmonyOS鸿蒙Next中RCP发送的post请求,参数怎么传不过去的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


确实是form-data,测试了好用,

在HarmonyOS Next中,RCP请求参数传递失败通常由以下原因导致:参数序列化格式与服务器要求不匹配,需检查JSON键名和结构是否与服务端接口定义一致;网络权限未在module.json5中正确配置,需确认已添加ohos.permission.INTERNET权限;参数编码问题,特殊字符需进行URL编码;RPC接口版本兼容性问题,确认@Rpc注解的version属性与远端服务匹配。使用hilog打印完整请求数据可辅助定位具体传输环节问题。

在HarmonyOS Next中,RCP模块的post方法默认使用JSON格式传输数据。你的客户端代码是正确的,但服务端接收方式需要调整。

服务端应该使用@RequestBody注解来接收JSON参数:

@PostMapping("/userInfo")
@ResponseBody
public AjaxResult userInfo([@RequestBody](/user/RequestBody) UserInfo userInfo) {
    String name = userInfo.getName();
    int age = userInfo.getAge();
    // 处理业务逻辑
}

同时需要创建对应的实体类:

public class UserInfo {
    private String name;
    private int age;
    
    // getter和setter方法
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

如果你希望保持原有的参数接收方式,可以在客户端设置Content-Type为application/x-www-form-urlencoded,并使用FormData方式传递参数:

import formData from '@ohos.util.formData';

const formData = new formData.FormData();
formData.append('name', 'john');
formData.append('age', '33');

const session = rcp.createSession();
session.post(url, formData)
  .then((response) => {
    // 处理响应
  });

推荐使用第一种JSON方式,这是RPC通信的标准做法。

回到顶部