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 애플리케이션에서 요청 매개 변수와 경로 변수를 모두 검증하는 방법을 배웠습니다.