programing

스프링 부트 - 2.2.5에서2.3.0으로 업그레이드 후 검증이 정지됨

lastmemo 2023. 3. 22. 20:38
반응형

스프링 부트 - 2.2.5에서2.3.0으로 업그레이드 후 검증이 정지됨

Spring Boot 프로젝트를 2.2.5에서 2.3.0으로 이행한 후 검증이 정지되었습니다(전혀 실행되지 않습니다).

changelog documentation(https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3.0-M1-Release-Notes),에서 읽었습니다.spring-boot-starter-validation이제 의존관계로 수동으로 추가해야 합니다.

그래서 pom.xml에 추가했습니다.

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

나의 폼부모는:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.0.RELEASE</version>
    <relativePath></relativePath>
</parent>

컨트롤러의 외관은 다음과 같습니다.

@PostMapping( value = "/signup", consumes = MediaType.APPLICATION_JSON_VALUE )
@ResponseStatus( value = HttpStatus.OK )
public void signUp( @Valid @RequestBody ClientDto clientDto )
{
    onboardingService.signUp( clientDto );
}

편집:

문제를 찾을 수 있었습니다. 아래에서 답변을 확인하십시오!

도와줘서 고마워요!

검증 스타터는 웹 스타터에 포함되지 않게 되었습니다.

spring-boot-starter-validation은 이제 spring-boot-starter-web과 spring-boot-starter-webflux의 과도적 종속성이 아닙니다.

검증 작업에 이 종속성을 추가합니다.

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

스프링 부트 2.3.1 릴리즈에 따르면 스프링 스타터에는 스프링 부트 스타터 검증 기능이 없습니다.

스타터 검증을 추가하는 방법

메이븐

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

그라들

dependencies {
  ...
  implementation 'org.springframework.boot:spring-boot-starter-validation'
}

릴리스 노트를 심판하다

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes#validation-starter-no-longer-included-in-web-starters

클라이언트에 반환된 검증 에러(디폴트메시지)를 확인할 수 없는 등의 문제가 발생했을 경우 다음과 같이 할 수 있습니다.

주요 솔루션 1: devtools를 추가하는 것만으로 끝납니다.이것으로 문제가 해결됩니다.이 작업을 수행한 후 모든 바인딩 결과가 클라이언트에 반환되었습니다.먼저 테스트해 보는 것이 좋습니다.

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
</dependency>

해결책 2:

이것은 Spring Boot 2.3+를 사용하기 때문에 Spring Boot 2.3 이후를 사용하고 있는 경우는, 이 의존관계를 「web」의 의존관계 자체에 포함되지 않게 되어, pom.xml 파일에 추가합니다.

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

이제 java/resources/application.properties에서 "include binding errors"를 "always"로 설정해야 합니다.이것은 옵션이라고 생각합니다만, 「메시지」도 마찬가지입니다.

server.error.include-message=always
server.error.include-binding-errors=always

솔루션 3: (솔루션 2도 도움이 될 수 있는 것을 발견하기 전에)

Spring boot 2.3+가 원인이라는 것을 알게 되었습니다.그러나 새로 업데이트된 @Valid in Spring Boot v2.3+ 사용에 대한 주의 메시지를 찾을 수 없었습니다.

따라서 다음과 같이 pom.xml 파일의 릴리스 버전을 조정하여 Spring boot v2.2.10(최신 버전 2.2)으로 다시 전환했습니다.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.10.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

이것은 이전 버전으로 롤백함으로써 나에게 완벽하게 작동했다.언젠가 Spring Boot 버전을 업데이트하고 싶습니다.(솔루션 1과 2를 참조해 주세요)

사실 유닛 테스트에 오류가 있었습니다.검증은 정상적으로 동작하고 있었습니다.

같은 문제를 안고 이곳에 오신 분들은 위에서 Braian Silva가 제안한 바와 같이 pom.xml에 다음과 같은 의존관계를 추가하지 않으셨을 가능성이 높습니다.

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

도와주셔서 감사합니다 여러분!

안녕하세요 컨트롤러 클래스에 주석을 달아야 합니다.@Validated주석의 예는 다음과 같습니다.

테스트 목적으로 코멘트를 시험해 보세요.@Validated눈치채지 못할 주석javax.validation.ConstraintViolationException: hello.name: size must be between 4 and 10 다시 원래대로 되돌리면 돼요.자세한 기술 정보는 여기를 참조하십시오.@Valid와 @Validated in Spring의 차이

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Validated
    @RestController
    @RequestMapping("/hello")
    class HelloController {
        @GetMapping
        public String hello(@Valid
                            @NotNull(message = "Name cannot be empty")
                            @Size(min = 4, max = 10) @RequestParam("name") String name) {
            return "Hello, " + name + "!";
        }
    }
}
<?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.3.0.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 project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <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>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

여기도 비슷한 문제가 있어요.그러나 이 경우 검증 결과 Oracle 스키마에서 시퀀스가 누락되었지만 해당 시퀀스는 존재한다고 경고됩니다.그건 버그인 것 같아요.당분간 2.4.0 버전으로 하겠습니다.

아무도 실제로 같은 문제를 해결하지 않는다.저는 위의 지시대로 의존관계도 추가했습니다.진정한 솔루션:

  1. 종속성 추가
  2. mvn 클린 설치
  3. mvn 클린 스프링부트: 실행

모든 것이 잘 된다

위의 문제에 대한 간단한 해결책은 다음과 같습니다.

<repositories>
        <repository>
            <id>Central Maven repository</id>
            <name>Central Maven repository https</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

POM.xml 파일로 이동합니다.그러면 이 버전의 문제가 해결됩니다.

ViPul.

언급URL : https://stackoverflow.com/questions/61959918/spring-boot-validations-stopped-working-after-upgrade-from-2-2-5-to-2-3-0

반응형