类验证器不验证实体

Posted

技术标签:

【中文标题】类验证器不验证实体【英文标题】:class-validator doesn't validate entity 【发布时间】:2021-07-24 04:03:12 【问题描述】:

我可以使用class-validator 来验证Entity 列吗?

这不会验证列:

import  IsEmail  from 'class-validator';

@Entity()
export class Admin extends BaseEntity 

  @Column( unique: true )
  @IsEmail()
  email: string;


但是,当我在代码中除实体以外的任何其他位置使用 class-validator 时,它会正确验证并且不允许输入错误。

这行得通:

@InputType()
export class RegisterInput 

  @Field()
  @IsEmail()
  email: string;


【问题讨论】:

您是否使用Admin 类作为输入DTO 类型? 我会说最好不要暴露你的实体,而只依赖于 DTO => 实体映射 不,我使用 RegisterInput 作为 dto 这不应该在数据库级别上完成。带有验证管道的 DTO 将是解决此问题的最佳解决方案。您检查传入的请求,然后让它与与数据库交互的服务进行通信。 【参考方案1】:

实体应该是干净的

@Entity()
    export class Admin extends BaseEntity 
    
      @Column( unique: true )
      email: string;
    
    

当你定义一个 DTO 来检查传入的请求时。

export class AdminDto 

@IsEmail() 
email: string;


在您的控制器中,您将使用 AdminDto 检查传入的请求。

@Controlller('route')
export class AdminController 
constructor(private yourService: yourserviceClass)

@Post('/api')
async createSomething(@Body('email', ValidationPipe) email: string) //Your request body //would be checked against your DTO
this.yourService.createMethod(email)

希望这能回答你的问题。

【讨论】:

我遇到了同样的问题。这就是我一直在寻找的。谢谢

以上是关于类验证器不验证实体的主要内容,如果未能解决你的问题,请参考以下文章

Java SpringBoot 实体类数据自动验证

.NET6之MiniAPI(二十):实体验证FluentValidation

BindingResult 验证请求数据

SpringMVC验证框架Validation特殊用法

SpringMVC验证框架Validation特殊用法

从PowerDesigner表字段的Name到EF实体类属性的Display Name(根据PowerDesigner生成EF实体类中文注释和验证元数据)