HarmonyOS 接口返回偶现空字段

接口正常的时候data返回Json字符串,异常的时候Json返回null,接口异常返回内容如下:{"code":500,"msg":"对不起, 账号或密码错误。","data":null}解析方法如下

let bean: ResponceBean = JSON.parse(JSON.stringify(response.data)); 

基类定义如下:

export default class ResponceBean {
  public code: number = 200
  public data: object | null = null
  public msg: string = ''
}
HarmonyOS
6天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

该能力需要用到三方库class-transformer;参考链接如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkts-kit-V5#section131491140134716

参考demo如下:

import { Type, plainToClass, plainToClassFromExist } from 'class-transformer'
import "reflect-metadata"

// 假设为接受的Json数据
let testJSON: Record<string, ESObject> = {
  'id': 1,
  'firstName': "Johny",
  'lastName': "Cage",
  'age': 27,
  'arr': [
    {
      'name': 'john'
    },
    {
      'name': 'tom'
    }
  ],
  'instanceA': {
    'name': 'john'
  },
}

// 如果有对应嵌套结构,需要指定对应的类型
class A {
  name: string = 'john';

  getName(): string {
    return this.name
  }
}

// 当尝试转换具有嵌套对象的对象时,需要知道要转换的对象类型,使用@Type装饰器隐式地指定每个属性包含的对象类型
class User {
  id: number = 0;
  firstName: string = '';
  lastName: string = '';
  age: number = 0;
  @Type(() => A)
  arr: A[] = [new A()]
  @Type(() => A)
  instanceA: A | null = null;

  getName() {
    return this.firstName + " " + this.lastName;
  }

  isAdult() {
    return this.age > 36 && this.age < 60;
  }
}

class HttpRequest11<T> {
  responseData: Record<string, ESObject> = {
    'id': 1,
    'firstName': "Johny",
    'lastName': "Cage",
    'age': 27,
    'arr': [
      {
        'name': 'john'
      },
      {
        'name': 'tom'
      }
    ],

    'instanceA': null,
  }

  test(t: T) {
    //使用泛型
    let ee = plainToClassFromExist(t, this.responseData)
    console.log(JSON.stringify(ee))
  }
}

@Entry
@Component
struct parsingJSONStringsIntoInstanceObjects {
  aboutToAppear(): void {
    const instance = plainToClass(User, testJSON);
    console.log(' sss     ' + instance.arr[0].getName())
    let ss = new HttpRequest11<User>()
    ss.test(new User())
    console.info('instance:' + JSON.stringify(instance))
  }
  build() {
    Column({ space: 20 }) {

      Text('SO₂')
        .width('100%')
      Button('Test')
        .type(ButtonType.Capsule)
        .onClick(() => {
        })
        .width('50%')
    }
    .width("100%")
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}
分享
微博
QQ
微信
回复
6天前
相关问题
HarmonyOS media.AVPlayer报错
60浏览 • 1回复 待解决
HarmonyOS app图标显示错误
185浏览 • 1回复 待解决
HarmonyOS 视频播放 5400106 错误码
176浏览 • 1回复 待解决
HarmonyOS ArkTS调C++ 方法找不到。
611浏览 • 1回复 待解决
router.back调用时,app自动退出
1808浏览 • 1回复 待解决
HarmonyOS 接受接口返回的json数据
289浏览 • 1回复 待解决
HarmonyOS 文件上传接口数据返回信息
153浏览 • 1回复 待解决
HarmonyOS 华为账号登录接口返回信息
756浏览 • 1回复 待解决