HarmonyOS 接口返回偶现空字段

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

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

基类定义如下:

export default class ResponceBean {
  public code: number = 200
  public data: object | null = null
  public msg: string = ''
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
HarmonyOS
2024-12-28 07:19:30
浏览
收藏 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)
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
分享
微博
QQ
微信
回复
2024-12-28 10:39:41
相关问题
HarmonyOS media.AVPlayer报错
798浏览 • 1回复 待解决
HarmonyOS app图标显示错误
909浏览 • 1回复 待解决
HarmonyOS 视频播放 5400106 错误码
852浏览 • 1回复 待解决
HarmonyOS ArkTS调C++ 方法找不到。
1372浏览 • 1回复 待解决
router.back调用时,app自动退出
2368浏览 • 1回复 待解决
HarmonyOS 接受接口返回的json数据
1018浏览 • 1回复 待解决
HarmonyOS 文件上传接口数据返回信息
899浏览 • 1回复 待解决