我希望DTO使用验证器注释来验证字段输入,但前提是请求中的字段不是空字符串.

例如,我有一个UserDto,它接受一个长度必须在6到20之间的字符串用户名字段.但我也想让请求能够为该字段发送一个空字符串.

请求示例:

{
  "username": "", // empty field won't be validated
  "email": "email@email.com",
  "password": "password123",
  etc...
}

示例实体:

@Data
public class AdminUpdateUserDto {
    @Nullable
    @Length(min = 6, max = 20) // applies only if string isn't empty
    private String username;

    @Email
    @Length(min = 5, max = 30)
    private String email;

    @Length(min = 6, max = 20)
    private String password;

如果不在DTO类中创建自定义验证器,或者更好地说,这是可能的吗?

推荐答案

@Min(6)
@Max(20)
@Pattern(regexp = "^$|.{6,20}"

Java相关问答推荐

@ IdClass with @ Inheritance(策略= InheritanceType. SINGLE_TABLE)

试着做一个2x2的魔方求解算法,我如何找到解路径(DFS)?

在Eclipse中数组的可空性

WebSockets和Spring Boot安全性出现错误401

如何从日志(log)行中删除包名称?

如何在Cosmos DB(Java SDK)中增加默认响应大小

在VS代码中,如何启用Java Main函数的&Q;Run|DEBUG&Q;代码?

使用htmlunit和java单击按钮

没有使用Lombok生成的参数

如何使这两种方法合二为一?

如何生成指定范围内的11位序列号?

寻找Thread.sky()方法的清晰度

JPA无手术同品种器械可能吗?

获取所有可以处理Invent.ACTION_MEDIA_BUTTON Android 13 API33的Android包

不能在 map 上移除折线

PhantomReference无法访问时会发生什么?

java21预览未命名的符号用于try-with-resources

转换为JSON字符串时,日期按天递减-Java

@此处不能应用可为null的批注

OpenAPI Maven插件生成错误的Java接口名称