javax.validation.constraints中的注释不起作用(已忽略)
我试图使用javax约束在运行逻辑之前预先验证请求内容 我已经尝试过任何可能的解决方案,但仍然无法在Spring引导中使用javax注释javax.validation.constraints中的注释不起作用(已忽略),java,spring-boot,kotlin,annotations,constraints,Java,Spring Boot,Kotlin,Annotations,Constraints,我试图使用javax约束在运行逻辑之前预先验证请求内容 我已经尝试过任何可能的解决方案,但仍然无法在Spring引导中使用javax注释 import javax.validation.constraints.Min import javax.validation.constraints.Pattern data class LoginRequest ( @Credential //Custom constraint that works just fine v
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>
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
spring引导启动器数据jpa
.
.
javax.validation
验证api
2.0.1.最终版本
org.hibernate.validator
休眠验证器
6.0.17.1最终版本
org.hibernate.validator
hibernate验证程序注释处理器
6.0.17.1最终版本
这是控制器
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()
}
import javax.validation.Valid
@后映射(“/login”)
有趣的用户登录点(@Valid@RequestBody loginRequest:loginRequest):ResponseEntity{
返回authService.loginUser(loginRequest)
?.让{ResponseEntity(it,HttpStatus.ACCEPTED)}
?:ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()
}
我做错什么了吗?来自@JBNizet comment
将
@Min(value=5)
(当然还有其他验证注释)替换为@field:Min(value=5)
将@Min(value=5)
(当然还有其他验证注释)替换为@field:Min(value=5)
@jbnize是的,它起作用了!谢谢然而,我仍然不明白这会有什么不同。有什么线索吗?如果没有指定@field
,那么注释的是构造函数参数AFAIK。但Spring会在构建对象后验证它。所以需要注释的是字段。