为 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
}
客户将以下有效负载发送到 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
}