spring-boot - 为什么休眠验证不起作用?
问题描述
我已经向我的 DTO 添加了休眠验证注释,并且在控制器中我添加了 @Valid 注释,但是当我使用邮递员而不是由于输入无效而引发错误时,它会将数据存储在数据库中。
这是我的 Dto 课程:
@Getter
@Setter
@NoArgsConstructor
public class CategoryDto {
@Email
private String name;
@NotNull(message = "Cannot be null")
private String imageUrl;
private String message;
public CategoryDto(Category category, String message) {
this.name = category.getName();
this.imageUrl = category.getImageUrl();
this.message = message;
}
}
这是我的控制器类:
@PostMapping(value = "/add")
public ResponseEntity<Category> addCategory(@Valid @RequestBody CategoryDto categoryDto) throws CategoryAlreadyExistsException {
Category categoryDetail = categoryService.addCategory(new Category(categoryDto));
return new ResponseEntity<>(categoryDetail, HttpStatus.CREATED);
}
这是服务类:
@Override
public Category addCategory(Category category) throws CategoryAlreadyExistsException {
if (categoryRepository.findById(category.getName()).isPresent()) {
throw new CategoryAlreadyExistsException(ExceptionMessage.CATEGORYALREADYEXISTS);
}
return categoryRepository.save(category);
}
这是我的 build.gradle 文件:
plugins {
id 'org.springframework.boot' version '2.5.0-SNAPSHOT'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'org.sonarqube' version '3.0'
id 'jacoco'
}
group = 'com.project'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '15'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
maven { url 'https://repo.spring.io/snapshot' }
}
dependencies {
implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.5.5'
implementation group: 'org.hibernate.validator', name: 'hibernate-validator', version: '7.0.1.Final'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
// implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
sonarqube {
properties {
property 'sonar.host.url', 'http://localhost:9000'
property 'sonar.login' , 'admin'
property 'sonar.password', 'J*j*ts*'
}
}
//jar {
// manifest {
// attributes "Main-Class": "GeckoApplication"
// }
//}
jacocoTestReport {
reports {
xml.enabled true
}
}
我不知道为什么 spring boot 会这样。它实际上应该抛出一个 MethodArgumentNotValidException 但它甚至不验证输入,它直接将数据存储在数据库中。这是我的 Json 请求:
{
"name": "asdkald",
"imageurl": ""
}
{
"name": "asdkald"
}
我尝试了不同的方法,但它不起作用。这是我试图点击“localhost:8090/gecko/category/add”的网址。我用邮递员打到了休息的终点。
解决方案
这是由于休眠验证器的版本。我将版本从 7.0.1.Final 更改为 6.1.5.Final 并且一切都开始工作
推荐阅读
- java - 文件 IO 的 LinkedList 通过输出显示相同
- python - 文件上传期间特定系统中的Python IO异常如何解决。?
- html - 使嵌入元素移动响应
- bash - custom date/time format for --out-format in rsync
- javascript - Promise 和 React Native 协助
- python - Python Flask - 无法返回布尔值 true
- c# - 如何使用 C# 将数据插入本地数据库
- java - 如何阻止null打印
- javascript - 不能更正我的 javascript 代码以进行文件大小验证?
- git - git-svn clone:无法连接到存储库