使用 DTO 验证请求参数

问题描述 投票:0回答:1

我有一个

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"
}
java spring spring-boot spring-mvc
1个回答
0
投票

我以前也遇到过同样的问题。 对我来说,问题出在我的 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>
© www.soinside.com 2019 - 2024. All rights reserved.