1. 소개
대부분의 일반적인 웹 애플리케이션에서는 요청 매개 변수를 사전 정의 된 값 세트로 제한해야하는 경우가 많습니다. 열거 형은이를 수행하는 좋은 방법입니다.
이 빠른 예제에서는 Spring MVC에서 웹 요청 매개 변수로 열거 형을 사용하는 방법을 보여줄 것입니다.
2. 열거 형을 요청 매개 변수로 사용
먼저 예제에 대한 열거 형을 정의하겠습니다.
public enum Modes {
ALPHA, BETA;
}
그런 다음이 열거 형을 Spring 컨트롤러에서 RequestParameter 로 사용할 수 있습니다 .
@GetMapping("/mode2str")
public String getStringToMode(@RequestParam("mode") Modes mode) {
// ...
}
또는 PathVariable 로 사용할 수 있습니다 .
@GetMapping("/findbymode/{mode}")
public String findByEnum(@PathVariable("mode") Modes mode) {
// ...
}
/ mode2str? mode = ALPHA 와 같은 웹 요청을 할 때 요청 매개 변수는 String 객체입니다. Spring은 StringToEnumConverterFactory 클래스 를 사용 하여이 String 객체를 Enum 객체 로 변환 할 수 있습니다 .
백엔드 변환은 Enum.valueOf 메서드를 사용합니다 . 따라서 입력 이름 문자열은 선언 된 열거 형 값 중 하나와 정확히 일치해야합니다 .
열거 형 값 중 하나와 일치하지 않는 문자열 값 ( 예 : / mode2str? mode = unknown) 으로 웹 요청을하면 Spring은 지정된 열거 형 유형으로 변환하지 못합니다. 이 경우, 우리는거야 ConversionFailedException을 .
3. 사용자 지정 변환기
Java에서는 상수이기 때문에 대문자로 열거 형 값을 정의하는 것이 좋습니다. 그러나 요청 URL에 소문자를 지원할 수 있습니다.
이 경우 사용자 지정 변환기를 만들어야합니다.
public class StringToEnumConverter implements Converter<String, Modes> {
@Override
public Modes convert(String source) {
return Modes.valueOf(source.toUpperCase());
}
}
사용자 정의 변환기를 사용하려면 Spring 구성에 등록 해야 합니다 .
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new StringToEnumConverter());
}
}
4. 예외 처리
StringToEnumConverter 의 Enum.valueOf 메서드는 Modes 열거 형에 일치하는 상수가없는 경우 IllegalArgumentException 을 throw합니다 . 사용자 지정 변환기에서 요구 사항에 따라 다른 방식으로이 예외를 처리 할 수 있습니다.
예를 들어, 변환기 가 일치하지 않는 String에 대해 null 을 반환하도록 할 수 있습니다 .
public class StringToEnumConverter implements Converter<String, Modes> {
@Override
public Modes convert(String source) {
try {
return Modes.valueOf(source.toUpperCase());
} catch (IllegalArgumentException e) {
return null;
}
}
}
그러나 사용자 정의 변환기에서 예외를 로컬로 처리하지 않으면 Spring은 호출하는 컨트롤러 메서드에 ConversionFailedException 예외를 throw합니다 . 이 예외를 처리하는 방법 에는 여러 가지가 있습니다 .
예를 들어 전역 예외 처리기 클래스를 사용할 수 있습니다.
@ControllerAdvice
public class GlobalControllerExceptionHandler {
@ExceptionHandler(ConversionFailedException.class)
public ResponseEntity<String> handleConflict(RuntimeException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
}
}
5. 결론
이 기사에서는 몇 가지 코드 예제와 함께 Spring에서 요청 매개 변수로 열거 형을 사용하는 방법을 보여주었습니다.
또한 입력 문자열을 열거 형 상수에 매핑 할 수있는 사용자 지정 변환기 예제도 제공했습니다.
마지막으로 알려지지 않은 입력 문자열을 만났을 때 Spring이 던진 예외를 처리하는 방법을 논의했습니다.
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/spring-enum-request-param
'Java' 카테고리의 다른 글
스프링 유효성 검사 메시지 보간 (0) | 2021.04.15 |
---|---|
Spring URL에서 슬래시 문자 사용 (0) | 2021.04.15 |
Spring 웹 애플리케이션의 Flash 속성 사용방법(예제) (0) | 2021.04.14 |
Spring에서 HttpServletRequest를 여러 번 읽기 (0) | 2021.04.14 |
Hibernate Spatial 소개 (0) | 2021.04.14 |