스프링 부트 검증 주석 @Valid 및 @NotBlank가 작동하지 않음
getPDFDetails 메서드를 호출하는 메인컨트롤러를 다음에 나타냅니다.
@RequestMapping(value=PATH_PRINT_CONTRACTS, method=RequestMethod.POST)
public ResponseEntity<?> printContracts(@RequestBody final UpdatePrintContracts updatePrintContracts) throws Exception {
System.out.println("contracts value is "+ updatePrintContracts);
Integer cancellationReasons = service.getPDFDetails(updatePrintContracts);
System.out.println("success!");
return ResponseEntity.ok(cancellationReasons);
}
다음은 검증 주석 및 대응하는 getter/setter 메서드를 사용하여 모든 변수를 정의한 UpdatePrintContracts 클래스입니다.
public class UpdatePrintContracts {
@Valid
@NotBlank
@Pattern(regexp = "\\p{Alnum}{1,30}")
String isReprint;
@Valid
@NotBlank
Integer dealerId;
@Valid
@NotBlank
@Pattern(regexp = "\\p{Alnum}{1,30}")
String includeSignatureCoordinates;
@Valid
@NotBlank
java.util.List<Integer> contractNumbers;
public String getIsReprint() {
return isReprint;
}
public void setIsReprint(String isReprint) {
this.isReprint = isReprint;
}
public Integer getDealerId() {
return dealerId;
}
public void setDealerId(Integer dealerId) {
this.dealerId = dealerId;
}
public String getIncludeSignatureCoordinates() {
return includeSignatureCoordinates;
}
public void setIncludeSignatureCoordinates(String includeSignatureCoordinates) {
this.includeSignatureCoordinates = includeSignatureCoordinates;
}
public java.util.List<Integer> getContractNumbers() {
return contractNumbers;
}
public void setContractNumbers(java.util.List<Integer> contractNumbers) {
this.contractNumbers = contractNumbers;
}
}
프로젝트(다른 이름으로 실행)를 마우스 오른쪽 버튼으로 클릭하고 변수 isReprint 및 includeSignatureCoordinates의 빈 값을 Soap UI를 통해 전달하여 응용 프로그램을 Spring Boot 앱으로 실행하려고 합니다.그러나 유효성 검사가 작동하지 않으며 Soap UI에서 유효성 검사 오류를 발생시키지 않습니다.제가 무엇을 빠뜨리고 있나요?어떤 도움이라도 감사합니다!
최신 버전의 스프링부트(2.3.0)에서 이 문제가 발생했을 경우는, 다음의 의존 관계를 추가해 주세요.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
관찰:Spring Boot의 이전 버전(1.4.7)에서는javax.validation
바로바로 작업하곤 했죠그러나 최신 버전으로 업그레이드한 후 주석이 끊어졌습니다.다음 종속성을 추가하는 것만으로는 작동하지 않습니다.
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
이는 JSR 사양은 제공되지만 구현은 제공되지 않기 때문입니다.를 사용할 수도 있습니다.hibernate-validator
대신spring-boot-starter-validation
.
2.0.1에서 이 문제가 발생하는 모든 사용자에게 적합합니다.최종:
2.2 이상의 모든 SpringBoot 버전에서 Validations Starter는 더 이상 Web Starter의 일부가 아닙니다.
따라서 이 의존관계를 build.gradle/pom 파일에 추가하기만 하면 됩니다.
그래들:
implementation 'org.springframework.boot:spring-boot-starter-validation'
메이브
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
먼저 UpdatePrintContracts에서 이러한 클래스 변수에 대해 @Valid 주석을 사용할 필요가 없습니다.삭제할 수 있습니다.
@Controller 입력 검증을 트리거하려면 입력 인수에 @Valid 또는 @Validated로 주석을 붙입니다.
@RequestMapping(value=PATH_PRINT_CONTRACTS, method=RequestMethod.POST)
public ResponseEntity<?> printContracts(@Valid @RequestBody final UpdatePrintContracts updatePrintContracts) throws Exception {
스프링 부트에서의 모델 검증에 대한 자세한 내용은 여기를 참조하십시오.
또한 문자열에 특정 문자만 포함되어 있는지 확인하려면 패턴이 모든 문자열과 일치하는지 확인하기 위해 앵커(문자열의 시작은 ^, 끝은 $)를 추가해야 합니다.괄호는 수량을 기입하기 위한 것입니다.
@Pattern(regexp = "^[\\p{Alnum}]{1,32}$")
마지막으로, 네 반에 다음 항아리가 있을 거야
.validation-api.jar (추상 API와 주석 스캐너 포함)
.syscate-validator.jar (구체적인 실장)
나도 같은 실수를 했다.
아래 두 개의 종속성을 단독으로 사용해야 했습니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
리고 and and를 사용하세요.@Validated
import org.springframework.validation.인터레이션).Validated)및 "Rest " (REST 완료)@Valid
method " " " " " " ( "ax. validation " " " ) 。 ( )
javax.validation.validation-api
,org.hibernate.hibernate-validator
아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다. 이러한 를 pom.
스프링 부트에서 이 검증 의존성을 사용했는데 작동하지 않았습니다.
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
spring-boot-starter-validation으로 대체했더니 효과가 있었습니다.
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-
starter-validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.4.0</version>
이것은, 상기의 순서에 따라서도 같은 문제가 발생하고 있는 분들을 대상으로 하고 있습니다.변경을 유효하게 하려면 , IDE(IntelliJ)를 재기동할 필요가 있었습니다.
이것으로 나의 문제는 해결되었다. 내 ,@Valid
이 경우 모두 주석을 달아야 합니다.자세한 내용은 링크
스텝 1: pom.xml 파일에 이들2개의 의존관계를 추가합니다.
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
스텝 2: 다음과 같은 커스텀 예외 클래스 만들기
package com.bjit.salon.auth.service.exceptions;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import java.util.stream.Collectors;
@ControllerAdvice
public class AnynameApplicationException {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ResponseEntity<List<String>> processUnmergeException(final
MethodArgumentNotValidException ex) {
List<String> list = ex.getBindingResult().getAllErrors().stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.toList());
return new ResponseEntity<>(list, HttpStatus.BAD_REQUEST);
}
}
스텝 3: 다음과 같이 메서드 인수에 @Valid 주석을 추가합니다.
public ResponseEntity<?> registerAccount(@Valid @RequestBody UserRegisterDto
registerDto) {
// rest of the codes
}
반드시 @RequestBody 앞에 @Valid 주석을 사용하십시오.
이 ""에서 합니다.jakarta.validation.*
, 'package' (패키지)javax.validation.*
같기 주석의 이름이 둘 다 같기 때문에.
이 의존관계를 pom.xml에 추가해야 합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
주의: 일반적으로 스냅샷, M1, M2, M3, M4 릴리즈는 진행 중입니다.스프링 팀이 아직 작업 중이므로 사용하지 않는 것이 좋습니다.
@NotEmpty를 사용하면 빈 값과 늘 값을 모두 확인할 수 있습니다.RestController 클래스의 메서드에 @Valid 추가
언급URL : https://stackoverflow.com/questions/48614773/spring-boot-validation-annotations-valid-and-notblank-not-working
'source' 카테고리의 다른 글
리액트 앱에서 npm start를 실행할 때 babel-jest 의존성 문제 (0) | 2023.02.22 |
---|---|
Oracle SQL에서 특정 문자까지 서브스트링을 선택하는 방법 (0) | 2023.02.22 |
Angular에 몇 가지 작은 유틸리티 기능을 추가하는 방법JS 어플리케이션? (0) | 2023.02.22 |
jQuery AJAX 폼이 두 번 제출됨 (0) | 2023.02.22 |
Boost 속성 트리를 사용하여 어레이 읽기 (0) | 2023.02.22 |