【问题标题】:Spring Boot Validation with spring-boot-starter-validation is not working for Spring boot version 2.4.4使用 spring-boot-starter-validation 的 Spring Boot 验证不适用于 Spring Boot 版本 2.4.4
【发布时间】:2021-05-09 04:49:57
【问题描述】:

我试图在 Spring Boot 中验证请求正文,但它不起作用。目前我使用的是 Spring Boot 2.4.4 版本。这就是我所做的。

我添加了这个依赖spring-boot-starter-validation

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

具有导入验证功能的控制器

import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;

@RestController
@RequestMapping("api/administration")
@Validated
public class AdminController {

    @PostMapping("/create-organization")
    @PreAuthorize("hasAuthority('all:write')")
    public ResponseEntity createNewOrganization(
            @Valid @RequestBody OrganizationDto organization) {

        Organization response = adminService.createNewOrganization(organization);

        HttpHeaders headers = new HttpHeaders();
        headers.add("Location", "/api/organization/" + response.getId().toString());

        return new ResponseEntity(headers, HttpStatus.CREATED);
    }
}

组织Dto

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Builder
@ToString
public class OrganizationDto {

    @NotBlank
    @NotEmpty
    private String name;

    @NotBlank
    private String email;
}

我遇到的问题是当我从 Postman 发送以下正文时没有发生错误。

{
    "name": "",
    "email": ""
}

【问题讨论】:

  • 尝试在OrganizationDto类上方添加@Validated

标签: java spring spring-boot validation


【解决方案1】:

使用 Springboot

删除 @RequestBody 并简单地离开 @Valid 就足以让它工作。

sendEmail(@Valid SMTPEmail emailToSend) 

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
    <relativePath/>
</parent>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

删除任何 hibernate-api 和 hibernate-validator 依赖项。

【讨论】:

    【解决方案2】:

    您的代码似乎正确,应该可以正常工作。所以在那之后我的建议是:

    1) 使用 mvn clean install 构建项目并尝试构建的 jar 以查看它是否有效

    2)或者如果你从 Intelij 运行它

    尝试刷新maven依赖然后再次运行

    我想你后来添加了依赖项

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

    并且它没有正确插入依赖项。

    【讨论】:

    • 实际上我还添加了hibernate-validator 依赖项,它导致spring-boot-starter-validation 验证无法正常工作。一旦我删除 hibernate-validator 一切正常
    【解决方案3】:

    您应该使用@Validated 而不是@Valid

    public ResponseEntity createNewOrganization(
                @Validated @RequestBody OrganizationDto organization) {
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-10
      • 2015-06-28
      • 2020-06-02
      • 2014-04-07
      • 2021-01-12
      • 2018-10-07
      • 2021-05-31
      • 2016-01-29
      • 1970-01-01
      相关资源
      最近更新 更多