0

关于类转换器和路由控制器的使用。
也许是我不明白 class-transformer lib 的真正含义,但我想用它来转换从服务器(第三方)接收到的对象并将它们适应我自己的模型,使用不同的名称。理论上哪个应该有效,并且在 console.log-ing 新转换模型时,甚至在 JSON.stringify-ing 时有效。
但是由于某种原因,当使用路由控制器输出模型时,它只是输出相同的源对象。

用户等级:

class User {
  @Expose({ name: 'uid' }) // To convert/rename the "uid" property received from the server
  id: string
  firstName: string
  lastName: string
}

用户控制器.ts:

@JsonController('/users')
export class UsersController {
  @Get('/')
  async get() {
    const user = plainToClass(User, {
      uid: '123',
      firstName: 'Matthew',
      lastName: 'Michalsky'
    })

    console.log(user)

    return user
  }
}

控制台输出预期值:

User {
  id: '123',
  firstName: 'Matthew',
  lastName: 'Michalsky'
}

但是来自用户控制器(通过路由控制器库)的响应是:

{
  uid: '123',
  firstName: 'Matthew',
  lastName: 'Michalsky'
}

你看到我可能遗漏/做错了什么吗?谢谢。

4

1 回答 1

1

正确的。响应发回一个 json 数据,我们不能用它来传输类名。因此,如果您从控制器返回一个类实例,则routing-controllers适用classToPlain于它,您将获得一个转换后的普通对象。

如果您想跳过此行为,您应该配置@ResponseClassTransformOption.

  @ResponseClassTransformOption({
    ignoreDecorators: true,
  })
  @Get('/')
  async get() {

作为一个选项,您可以设置转换方向,例如仅 toClass,然后当通过 classToPlain 处理类实例时,此类装饰器不起作用。

于 2020-04-08T05:42:30.333 回答