1. 소개

이 튜토리얼에서는 Spring MVC에서 HTTP 요청 매개 변수와 경로 변수의 유효성을 검사하는 방법을 살펴 보겠습니다.

특히 JSR 303 어노테이션을 사용 하여 문자열 및  숫자  매개 변수의  유효성을 검사  합니다.

다른 유형의 유효성 검사를 탐색하려면 Java Bean 유효성 검사  및 메서드 제약 에 대한 자습서를 참조   하거나 자체 유효성 검사기만드는 방법을 알아보십시오  .

2. 구성

Java Validation API를 사용하려면 hibernate-validator 와 같은 JSR 303 구현을 추가해야합니다 .

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.10.Final</version>
</dependency>

또한 @Validated 어노테이션 을 추가하여 컨트롤러에서 요청 매개 변수와 경로 변수 모두에 대한 유효성 검사를 활성화해야합니다  .

@RestController
@RequestMapping("/")
@Validated
public class Controller {
    // ...
}

매개 변수 유효성 검사활성화하려면 MethodValidationPostProcessor bean이 필요 하다는 점에 유의 해야합니다 . Spring Boot 애플리케이션을 사용하는 경우이 빈은 자동 구성되며 클래스 경로에 대한 hibernate-validator 의존성이 있습니다.

그렇지 않으면 표준 Spring 애플리케이션에서이 빈을 명시 적으로 추가해야합니다.

@EnableWebMvc
@Configuration
@ComponentScan("com.baeldung.spring")
public class ClientWebConfigJava implements WebMvcConfigurer {
    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        return new MethodValidationPostProcessor();
    }
    // ...
}

Spring에서 경로 또는 요청 유효성 검사 중 오류가 발생하면 기본적으로 HTTP 500 응답이 발생합니다. 이 자습서에서는 ControllerAdvice 의 사용자 지정 구현을 사용하여 이러한 종류의 오류를보다 읽기 쉬운 방식으로 처리하고 잘못된 요청에 대해 HTTP 400을 반환합니다. 이 솔루션의 소스 코드는 GitHub 에서 찾을 수 있습니다 .

3. RequestParam 유효성 검사

요청 매개 변수로 컨트롤러 메서드에 숫자 요일을 전달하는 예를 살펴 보겠습니다.

@GetMapping("/name-for-day")
public String getNameOfDayByNumber(@RequestParam Integer dayOfWeek) {
    // ...
}

우리의 목표는 dayOfWeek 의 값이  1에서 7 사이 인지 확인하는 것입니다.이를 위해 @Min@Max 어노테이션을 사용합니다 .

@GetMapping("/name-for-day")
public String getNameOfDayByNumber(@RequestParam @Min(1) @Max(7) Integer dayOfWeek) {
    // ...
}

이러한 조건과 일치하지 않는 요청은 기본 오류 메시지와 함께 HTTP 상태 400을 반환합니다.

예를 들어 http : // localhost : 8080 / name-for-day? dayOfWeek = 24를 호출하면 응답 메시지는 다음과 같습니다.

getNameOfDayByNumber.dayOfWeek: must be less than or equal to 7

사용자 지정 메시지를 추가하여 기본 메시지를 변경할 수 있습니다.

@Max(value = 1, message = “day number has to be less than or equal to 7”)

4. PathVariable 유효성 검사 

@ RequestParam 과 마찬가지로 javax.validation.constraints  패키지의 어노테이션을 사용 하여 @PathVariable의 유효성을 검사 할 수 있습니다 .

String 매개 변수가 비어 있지 않고 길이가 10보다 작거나 같은지 확인하는 예를 고려해 보겠습니다.

@GetMapping("/valid-name/{name}")
public void createUsername(@PathVariable("name") @NotBlank @Size(max = 10) String username) {
    // ...
}

예를 들어 이름 매개 변수가 10 자보다 긴 요청  은 다음 메시지와 함께 HTTP 400 오류를 발생시킵니다.

createUser.name:size must be between 0 and 10

@Size 어노테이션 에서 메시지 매개 변수를  설정하여 기본 메시지를 쉽게 덮어 쓸 수 있습니다  .

5. 결론

이 기사에서는 Spring 애플리케이션에서 요청 매개 변수와 경로 변수를 모두 검증하는 방법을 배웠습니다.

항상 그렇듯이 모든 소스 코드는 GitHub에서 사용할 수 있습니다 .