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
需要确认一下服务端接收的参数类型是否为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通信的标准做法。