我有一个
HelloWorldController
,它根据传递的请求参数返回一个简单的响应。
下面是控制器,
@RestController
@Validated
@RequestMapping("/api")
public class HelloWorldController {
@GetMapping("/hello-world")
public HelloWorldBean getMethodName(@Valid @ModelAttribute HelloWorldRequestDTO requestDTO) {
return new HelloWorldBean(requestDTO);
}
}
我有以下
HelloWorldRequestDTO
的验证。
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Setter;
import lombok.ToString;
import lombok.Data;
import lombok.Getter;
@Getter
@Setter
@ToString
@Data
public class HelloWorldRequestDTO {
@NotBlank
private String message;
@NotBlank
private String firstName;
@NotBlank
@NotNull
@NotEmpty
private String lastName;
}
但是验证不起作用,
// http://localhost:8080/api/hello-world?message=hello&firstName=John
{
"message": "hello",
"greeting": "Hi, John null, here is your message: hello"
}
我以前也遇到过同样的问题。 对我来说,问题出在我的 pom. 我直接在我的pom中添加了jakarta-validation
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.2</version>
</dependency>
仅添加此依赖项是行不通的,因为它只是 API 而不是实际的实现
我是如何修复它的。
我没有直接添加 Jakarta 验证依赖项,而是将其替换为 spring-boot-starter-validation (这已从 spring-boot-starter-web (版本 2.3+)中删除)。 这包括 Jakarta 依赖项和相应的实现(hibernate-validator)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>RELEASE</version>
</dependency>