HarmonyOS鸿蒙Next中Axios请求参数用Record,传入boolean报错,求助!!!!

HarmonyOS鸿蒙Next中Axios请求参数用Record,传入boolean报错,求助!!!!

const params: Record<string, number | string | boolean | object> = {
  'isHarmony': true,
  'mobile': mobile,
  'password': password
};
post<UserInfo>('account/login', params)
  .then((userInfo) => {

  })
  .catch((err: AxiosError) => {
    
  });
export class HttpRequest {

  instance: AxiosInstance;

  constructor(instance: AxiosInstance){
    this.instance = instance;
  }
  
  post<T>(url: string, params?: Record<string, number | string | boolean | object>): Promise<T> {
    return this.instance.post<T, T>(url, params);
  }

}

报错:BusinessError: Parameter error. The type of true must be string


更多关于HarmonyOS鸿蒙Next中Axios请求参数用Record,传入boolean报错,求助!!!!的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS Next中,使用Axios发送请求时,若参数类型为Record,传入boolean值可能因类型不匹配导致序列化异常。建议将boolean参数转换为字符串或数值类型,例如使用String(value)Number(value)进行显式转换,或确保Record对象内所有值均为可序列化类型。检查请求配置,确认Content-Type设置正确,通常为application/json

更多关于HarmonyOS鸿蒙Next中Axios请求参数用Record,传入boolean报错,求助!!!!的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


问题出在Axios内部对请求参数的处理机制上。在HarmonyOS Next中,Axios默认会将请求参数序列化为URL查询字符串(针对GET请求)或JSON格式(针对POST请求),但底层网络库可能对boolean类型支持不完整。

解决方案:

  1. 将boolean值显式转换为string:
const params: Record<string, number | string | boolean | object> = {
  'isHarmony': true.toString(), // 转换为"true"
  'mobile': mobile,
  'password': password
};
  1. 或者在HttpRequest的post方法中添加参数预处理:
post<T>(url: string, params?: Record<string, number | string | boolean | object>): Promise<T> {
  // 转换boolean值为string
  const processedParams = Object.fromEntries(
    Object.entries(params || {}).map(([key, value]) => 
      [key, typeof value === 'boolean' ? value.toString() : value]
    )
  );
  return this.instance.post<T, T>(url, processedParams);
}
  1. 另一种方案是使用URLSearchParams:
const params = new URLSearchParams();
params.append('isHarmony', 'true');
params.append('mobile', mobile);
params.append('password', password);

推荐使用第一种方案,简单直接且类型安全。

回到顶部