【问题标题】:Annotations from javax.validation.constraints not working (ignored)javax.validation.constraints 中的注释不起作用(忽略)
【发布时间】:2019-07-27 06:10:23
【问题描述】:

我正在尝试使用 javax 约束在运行逻辑之前预先验证请求内容。

我已经尝试了任何可能的解决方案,但仍然无法将 javax 注释在 Spring 引导中工作。

import javax.validation.constraints.Min
import javax.validation.constraints.Pattern

data class LoginRequest (
        @Credential //Custom constraint that works just fine
        val credential: String,

        @Min(value= 5)
        val password: String,

        @Pattern(regexp = Constants.Regex.DEVICE_ID_REGEX, message = "Invalid device ID")
        val device: String
): Serializable

这是 pom.xml 的一部分

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
.
.
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.17.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator-annotation-processor</artifactId>
    <version>6.0.17.Final</version>
</dependency>

这是控制器

import javax.validation.Valid


@PostMapping("/login")
    fun userLoginEndpoint(@Valid @RequestBody loginRequest: LoginRequest): ResponseEntity<User> {
        return authService.loginUser(loginRequest)
                ?.let{ ResponseEntity(it, HttpStatus.ACCEPTED)}
                ?: ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()
    }

我做错了吗?

【问题讨论】:

  • @field:Min(value= 5)替换@Min(value= 5)(当然还有其他验证注释)。
  • @JBNizet 是的,它成功了!谢谢!但是,我仍然不明白这可能会有所不同。有什么线索吗?
  • 如果不指定@field,那么注解的是构造函数参数AFAIK。但是一旦对象被构造,Spring 会验证对象。所以需要注释的是字段。

标签: java spring-boot kotlin annotations constraints


【解决方案1】:

来自@JBNizet 评论

@Min(value= 5)(当然还有其他验证注释)替换为@field:Min(value= 5)

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 2016-05-22
    • 1970-01-01
    • 2021-05-11
    • 2011-11-13
    • 2012-07-16
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多