【问题标题】:SpringBoot Bean validation @NotEmpy is not WorkingSpring Boot Bean 验证 @NotEmpy 不起作用
【发布时间】:2020-01-03 20:36:14
【问题描述】:

我一直在尝试使用 spring @NotEmpty 来强制 REST api 中的一些输入参数。

到目前为止,这就是我所取得的成就。

休息控制器

@RestController
public class ResourceController {

    @Autowired
    private GestionaDatosCrmService service;

    @PostMapping(path = Constantes.OBTENER_DATOS_CRM)
    @ResponseStatus(HttpStatus.CREATED)
    public ObtenerDatosCrmResponse obtenerDatosCrm(@RequestHeader HttpHeaders headerRequest,
            @Valid @RequestBody ObtenerDatosCrmRequest request, HttpServletResponse headerResponse) {
        return service.obtenerDatosCrm(headerRequest, request, headerResponse);
    }
}

请求对象

import javax.validation.constraints.NotEmpty;

//import org.hibernate.validator.constraints.NotEmpty;

public class ObtenerDatosCrmRequest {

    @NotEmpty(message = "Please provide a number")
    private String numSN;
    private String callID;

    public String getNumSN() {
        return numSN;
    }

    public void setNumSN(String numSN) {
        this.numSN = numSN;
    }

    public String getCallID() {
        return callID;
    }

    public void setCallID(String callID) {
        this.callID = callID;
    }
}

请注意这个重要的细节,我在 @NotEmpty 注释中使用了 javax.validation.constraints.NotEmpty,但是当我更改为已弃用的 org.hibernate.validator.constraints.NotEmpty 时,这不起作用,@NotEmpty 启动并且我收到 400 Bad request 错误测试时。

我使用的是 spring boot 2.2.2.RELEASE,是否有一些已知的错误或问题?

【问题讨论】:

  • 可能只是您使用的是hibernate的验证规范实现。它需要它自己的注释才能工作。这很可能是罪魁祸首。很可能不是错误,只是它是如何工作的。从 spring 开始:“上面的基本配置将触发 Bean Validation 使用其默认引导机制进行初始化。JSR-303/JSR-349 提供程序,例如 Hibernate Validator,预计将出现在类路径中,并将被自动检测到。”见:docs.spring.io/spring/docs/4.1.x/spring-framework-reference/…
  • 在我的 pom 中,我添加了 validation-api 和 hibernate-validator 的依赖项,但这些似乎都不起作用
  • 使用正文添加请求和响应。如果 @NotEmpty 验证有效且 numSN 字段为空,您将收到 HTTP 400 Bad Request
  • 改用@NotBlank ..
  • @ShekharRai 试过 @NotBlank 同样的事情不起作用。

标签: java spring rest spring-boot hibernate-validator


【解决方案1】:

我遇到了完全相同的问题,对我有用的解决方案是明确要求更新的 hibernate-validator 版本。

分级:

implementation 'org.hibernate.validator:hibernate-validator:6.1.2.Final'

马文:

<dependency>
  <groupId>org.hibernate.validator</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>6.1.2.Final</version>
</dependency>

【讨论】:

  • 谢谢你的帖子,伙计!这种在 POJO 字段中带有 javax.validation.constraints.NotBlank 注释和在控制器对象中带有 @Valid 的依赖关系完美。
猜你喜欢
  • 2022-01-09
  • 2021-08-11
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 2020-11-22
  • 2020-11-05
  • 2021-05-08
  • 2017-02-12
相关资源
最近更新 更多