【问题标题】:Handling nested body in nest js for POST requests为 POST 请求处理嵌套 js 中的嵌套主体
【发布时间】:2021-09-15 12:58:20
【问题描述】:

客户将以下负载发送到 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 是一个写成的类

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

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

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

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

更新这是我的控制器 sn-p

@Controller('cont')
export class MyController{

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

【问题讨论】:

  • 您目前如何映射您的payload
  • 我依靠 readPayload 和 body 为我转换它。就像在弹簧控制器中一样。
  • payload 来自我的邮递员作为正文中的原始 json(应用程序/json 标头)

标签: node.js typescript nestjs


【解决方案1】:

要处理嵌套的主体,您必须将主体反序列化为类, 为此,您可以使用包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
}

【讨论】:

  • 成功了。谢谢 !我确实需要添加 @IsDefined() 和 @ValidateNested()
猜你喜欢
  • 1970-01-01
  • 2020-06-19
  • 2020-07-29
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多