我对 Spring boot 和依赖项 jakarta-validation-api 有疑问。
实际上我有一个简单的 DTO,其中包含一些属性。但是当我在 @Valid 注释中调用 REST 函数时,此属性并未得到验证。
有人能发现我的错误吗?
我的 pom.mxml 依赖项的片段:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0-M1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>jakarta.ws.rs</groupId>
<artifactId>jakarta.ws.rs-api</artifactId>
<version>3.0.0</version>
</dependency>
我的 DTO 课程:
import jakarta.validation.Valid;
@Data
public class TestDTO implements Serializable {
private static final long serialVersionUID = -1362258531757232654L;
@NotEmpty(message = "Id could not be empty or null.")
@Size(min = 36, max = 36, message = "Id must contains exactly out of 36 characters.")
private String id;
@Min(value = 1, message = "Page size cannot be null or <= 0.")
private Integer page;
}
还有 REST-Resource 类的片段,其中在正文中使用了 DTO:
@PostMapping(path = "/")
public Integer testValidation(@Valid @RequestBody TestDTO body) {
LOGGER.info(body);
return 1;
}
实际上,我认为当我调用 Post-REST 方法时,它将在进入方法主体之前进行验证,但实际上它之前没有经过验证就进入了方法主体。
是由于“jakarta”依赖而不是“javax”吗?
希望你能帮我 :)