为 POST 请求处理嵌套 js 中的嵌套主体

Handling nested body in nest js for POST requests

客户将以下有效负载发送到 REST 端点

{
   "name":"Harry potter",
   "address":{
      "street":"ABC Street",
      "pincode":"123",
      "geo":{
         "lat":"123",
         "long":"345"
      }
   }
}

REST 端点是使用 nestjs/common 8.0.6 版本作为 async readPayload(@Body() body:PayloadModel) 创建的。 PayloadModel.ts 是 class 写成

export class PayloadModel {
name: string,
address : Address
}

export class Address {
street:string,
pincode:string,
geo : Geo
}

export class Geo{
lat:string,
long: string
}

打印 body 时,我看到嵌套字段(街道、pincode、lat 等)的空值。映射所有这些的正确方法是什么?

更新这是我的控制器片段

@Controller('cont')
export class MyController{

@Post('/readme')
async readPayload(@Body() body:PayloadModel){
log.info(body)
}
}

要处理嵌套主体,您必须将主体反序列化为 class, 为此,您可以使用包 class-transformer。 您的代码如下所示:

import { Type } from 'class-transformer';

export class PayloadModel {
name: string,
@Type(()=>Address)
address : Address
}

export class Address {
street:string,
pincode:string,
@Type(()=>Geo)
geo : Geo
}

export class Geo{
lat:string,
long: string
}