最近在一个项目中,我注意到JSR303bean验证在Springboot版本2.3.0中不起作用。从发布开始(至少,不是以同样的方式,我甚至无法找出发布文档中发生了什么变化https://spring.io/blog/2020/05/15/spring-boot-2-3-0-available-now)对于Kotlin。
问题:@NotNull、@NotBlank等bean注释被忽略并且验证不启动。
有人注意到类似的事情吗?或者知道发生了什么变化,以及如何使bean验证在Springboot2.3.0中工作。发布开始?
这是我的设置-
工作设置
data class HelloDto(
@field:NotBlank(message = "greeting is required")
val greeting: String,
@field:NotBlank(message = "count is Required")
val count: String
)
@RestController
@RequestMapping("/api")
class MyController {
@PostMapping("/hello")
fun helloKotlin(@RequestBody @Valid helloDto: HelloDto): String {
return "hello world "+ helloDto.greeting
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.13.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<properties>
<java.version>11</java.version>
<kotlin.version>1.5.31</kotlin.version>
</properties>
<dependencies>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<configuration>
<args>
<arg>-Xjsr305=strict</arg>
</args>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<!-- RELEASE_VERSION -->
<version>5.1.0</version>
<!-- /RELEASE_VERSION -->
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/bank-api.yaml</inputSpec>
<generatorName>java</generatorName>
<configOptions>
<sourceFolder>src/gen/java/main</sourceFolder>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
请求:
{
"name":"",
"count":""
}
回应:
{
"timestamp": "2021-12-23T16:18:03.177+0000",
"status": 400,
"error": "Bad Request",
"errors": [
{
"codes": [
"NotBlank.user.name",
"NotBlank.name",
"NotBlank.java.lang.String",
"NotBlank"
],
"arguments": [
{
"codes": [
"user.name",
"name"
],
"arguments": null,
"defaultMessage": "name",
"code": "name"
}
],
"defaultMessage": "must not be blank",
"objectName": "user",
"field": "name",
"rejectedValue": "",
"bindingFailure": false,
"code": "NotBlank"
}
],
"message": "Validation failed for object='user'. Error count: 1",
"path": "/users"
}
非工作设置-只要我将springboot更新到2.3.0。RELEASE已忽略验证。
我发布这个问题有两个原因-
TIA!
发布这个答案以防其他人面临这个问题。
问题是
web启动器中不再包含验证启动器
因此,我们必须手动添加验证依赖项。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes#spring-boot-23-发行说明
我的springboot版本是2.3.7。我知道spring boot starter验证不是spring boot starter web的可传递依赖项。但即使单独添加了它,我的注释也不起作用。 //下面的依赖我已经添加build.gradle编译'org.springframework.boot: spring-boot-starter-validation' //我希望在请求时出错的示例类
我使用的firebase手机身份验证不起作用,它在调试模式下起作用,但当我在playstore的发布版本中发布它时,它显示错误 变体失败com.google.firebase.authFirebase AuthExcure:此应用无权使用Firebase身份验证。请确认Firebase控制台中配置了正确的软件包名称和SHA-1。[应用验证失败] 这是错误信息的截图
我正在android应用程序中使用Firebase SDK进行手机身份验证OTP验证。这在调试版本上运行良好,但在发布版本上不起作用。 在Firebase项目中添加了我的调试SHA-1指纹。 在Firebase项目中添加了我的发布认证SHA-1指纹。 我还没有发布/发布构建到google play store。 提前谢谢
OTP验证在调试构建中正常工作。我还在firebase控制台中为发行版添加了SHA键。但是当我生成签名的apk并将其上传到播放商店时,电话身份验证就不起作用了。我应该保留调试SHA密钥和释放密钥后,我上传的应用程序到生产的play Store?在生产过程中使用firebase应用程序时,谷歌应用程序签名是强制的吗?
我需要在我的Spring API中验证一些json输入和输出,我试图使用Spring boot starter验证(已经知道这不在spring-boot-starter-web中,所以我手动添加了它),但是当基于DTO类中的验证出现错误时,它从不抛出异常(MethodArgumentNotValidException) 完整的项目可以在github上fonud 我所尝试的: > 我尝试添加以下3个
我已经创建了一个react原生应用程序,我必须添加我已经完成的推送通知,对于推送通知,我使用了react原生onesignal软件包。但通知存在一些问题,在我的应用程序中,当我发送通知时,应用程序会收到通知,但当我尝试打开通知时,应用程序会卡住(挂在当前屏幕上),我还为单信号通知添加了Onpress事件侦听器。notifications onpressed事件侦听器在我的应用程序中工作不正常。有了