如何检查 spring 引导休息请求实体中的列表不为空

how to check the list is not null in spring boot rest request entity

我在 spring 引导控制器中有一个 rest 请求实体,定义如下:

package com.dolphin.rpa.application.command.credential;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @author xiaojiang.jiang
 * @date 2022/05/10
 **/
@Data
public class CredentialDeleteCommand {
    @NotNull(message = "should not be null")
    private List<Long> ids;

    @Min(1)
    @Max(2)
    private Integer mode;

}

现在我想确保 id 不应该为 null 或 size eqauls 0。我试过这些方法:

    @NotNull(message = "should not be null")
    @NotEmpty(message = "should not be null")
    @NotBlank(message = "should not be null")

但是无法工作。我还阅读了没有提到有效列表的官方文档。是否可以验证列表元素?这是我的要求 json:

{
    "ids": [
        
    ],
    "mode": 1
}

这个怎么样?

@Size(min=1)
private List<Long> ids;

@Size 或@NotNull 应该做的工作如果这个依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

已指定。

另外不要忘记@Valid 注释。

数组的另一种方法是在模型中初始化它们,所以即使它没有在 requestbody 中指定,你也会初始化它。

只需添加 @Size(min=1) 即可。

@Data
public class CredentialDeleteCommand {
    @NotNull(message = "should not be null")
    @Size(min=1)
    private List<Long> ids;

    @Min(1)
    @Max(2)
    private Integer mode;

}

错误可能是您调用此对象进行验证的地方。它肯定是来自属于 spring 的实例的某个方法。所以它应该是spring容器的一个bean。

通常你会在控制器的某些方法中使用它,因为控制器已经属于 spring 容器。

    @RequestMapping(path="/some-path",method=RequestMethod.POST)
    public ResponseEntity doSomething(@Valid @RequestBody CredentialDeleteCommand credentialDeleteCommand){
    ....
    }

请记住,@Valid 应该放在 @RequestBody 之前,否则它不起作用。至少在以前的 spring 版本中我遇到过这个问题。