当前位置: 首页 > 知识库问答 >
问题:

Nestjs:将复杂实体转换为DTO

景品
2023-03-14

我正在尝试将复杂的实体转换为Dto。我想从DTO中删除实体中的一些值。

我的实体看起来像这样(为了简单起见,省略了实体的大部分):

export class ResultEntity {
    constructor(
        public id: string,
        public userId: string,
        public results: CalculationOutputEntity[] = [],
        public item: Item = new Item(),
    ) { }
}

export class Item {
    constructor(
        public privat: Private = new Private(),
        public state: State = new State(),
        public combined: number = 0,
    ) { }
}

export class State {
    constructor(
        public numberA: number = 0,
        public numberB: number = 0,
        public numberC: number = 0,
        public numberD: number = 0,
    ) { }
}

我找到了一个对简单实体非常有效的解决方案:将实体转换为数据。如果我采纳了自定义html" target="_blank">拦截器的建议,删除id或整个item属性就可以了。

我尝试了两种方法来定义我的DTO:

    < li >它仅返回id和整个项目。
@Exclude()
export class AdvisoryResultDto {
    @Expose()
    public id: string;
    public userId: string;
    public results: CalculationOutputDto[];
    @Expose()
    public item: Item;
}
export class AdvisoryResultDto {
    public id: string;
    public userId: string;
    public results: CalculationOutputDto[];
    @Exclude()
    public item: Item;
}

现在的问题是我只想删除 item 属性中的某些值。例如,私有字段和状态属性编号 B 内。

我希望能够在嵌套类中使用< code>Exclude()删除单个值。

举个例子:

export class AdvisoryResultDto {
    public id: string;
    public userId: string;
    public results: CalculationOutputDto[];
    public item: Item;
}

export class Item {
    @Exclude()
    public privat: PrivateDto;
    public state: StateDto;
    public combined: number;
}

export class StateDto {
    public numberA: number;
    @Exclude()
    public numberB: number;
    public numberC: number;
    public numberD: number;
}

不幸的是,我找不到关于这个确切问题的任何东西。手动接管映射也不是一个解决方案,因为计算输出要复杂得多,并且嵌套了许多类和属性。

我只是错过了一小步,还是不能使用从类转换器中公开排除?如果不是,我希望有另一个解决方案。

共有2个答案

班建义
2023-03-14

为什么不创建一个构造函数,然后仅使用实体中的所需值启动 DTO?只需将实体对象传递给 DTO 的构造函数并从 DTO 中删除字段即可。

蓝华皓
2023-03-14

所以我在类变压器包的留档中找到了解决方案:https://github.com/typestack/class-transformer#working-with-nested-objects

我需要将@Type-Decorator添加到嵌套类

解决方案:

@Expose()
export class AdvisoryResultDto {
    public id: string;
    public userId: string;
    public results: CalculationOutputDto[];
    @Type(() => Item)
    public item: Item;
}

export class Item {
    @Exclude()
    @Type(() => PrivateDto)
    public privat: PrivateDto;
    @Expose()
    @Type(() => StateDto)
    public state: StateDto;
    public combined: number;
}

export class StateDto {
    public numberA: number;
    @Exclude()
    public numberB: number;
    public numberC: number;
    public numberD: number;
}
 类似资料:
  • 问题内容: 我有一个应用程序,该应用程序使用Jackson将我的复杂对象编组为JSON,从而在DynamoDB中存储一些数据。 例如,我要编组的对象可能如下所示: SomeObject可能看起来像这样: 和SomeOtherObject可能看起来像这样: 可以很好地将对象整理成问题并将其作为JSON字符串存储在数据库中。 当需要从DynamoDB检索数据时,Jackson会自动检索JSON并将其转

  • 某个物体可能看起来像这样: 另一个物体可能是这样的: 这很好,因为对象被封送,没有问题,并以JSON字符串的形式存储在DB中。

  • 我已将此JSON转换为Hashmap http://www.mocky.io/v2/5d0dc72d3400008c00ca4a62 我有嵌套的Hashmap,我想把它转换成ArrayList 我想从获取所有数据并添加到列表中。我还希望hashmap的密钥也将作为指南导入列表中。 这是银行舱 这是银行名单课程 我试过的 但我不明白为什么会有例外 如果可以的话,请给我推荐其他算法

  • 问题内容: 我没主意了。现在,我有一天在Google上进行了谷歌搜索,但仍然找不到我的问题的任何有用答案。 到目前为止,我一直尝试使用原始SQL,但是没有运气。 使用此原始SQL查询时,返回的结果为零,但是在其中运行相同的查询时,返回正确的结果。 我进一步发现,将查询打印到终端时,它不能正确处理该子句。 打印时我的查询如下所示: 如何将此SQL查询转换为SQLAlchemy 我的桌子看起来像这样:

  • 我有一个项目,我需要在数据库中存储用户。我正在使用Hibernate,在模块的某些部分中,也在实验性地使用Spring数据JPA。我有一个用于注册客户的RESTendpoint,并在那里接收UserDTO对象。之后,在其他服务中,我需要将其转换为UserEntity并保存在数据库中。 现在我创建了用户设置页面,我需要显示一些关于登录用户的信息。我不想发送UserDTO对象,因为有太多的数据,所以我

  • 我想将web设计师用纯HTML编写的复杂div容器转换为React组件。此div容器具有React to manage的状态。我知道我可以将div转换为JSX,但这意味着设计师和我都要加倍努力。危险的是,Html不处理状态。我可以创建React的子类。组件,定义状态并在不使用JSX的情况下将状态值呈现到div容器中? 下面是div容器标记的一个片段: