@RequestParam
을 사용하여 HTTP 요청의 파라미터 값을 컨트롤러 메소드의 매개변수로 받을 때, 요청 파라미터의 값은 기본적으로 문자열(String) 형태로 전달됩니다. 이때, Enum 형식의 값을 필요로 하는 경우, Spring은 문자열로 전달된 파라미터 값을 Enum으로 자동 변환해주지 않습니다. 따라서 Enum 값을 필요로 하는 경우, 변환 작업을 수동으로 해주어야 합니다.
예를 들어, 다음과 같은 열거형(Enum)이 있다고 가정해봅시다.
public enum LessonCategory {
MATH,
SCIENCE,
HISTORY
}
HTTP 요청에서 category
파라미터를 받아서 이를 LessonCategory
Enum으로 변환하려면, Spring에서 제공하는 Converter
를 사용하여 수동으로 변환 작업을 해주어야 합니다.
Converter
를 구현하여 문자열을 Enum으로 변환하는 클래스를 작성합니다.import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
@Component
public class StringToLessonCategoryConverter implements Converter<String, LessonCategory> {
@Override
public LessonCategory convert(String source) {
try {
return LessonCategory.valueOf(source.toUpperCase());
} catch (IllegalArgumentException e) {
// 예외 처리: 유효하지 않은 문자열이 전달된 경우 처리
return null; // 또는 기본값 설정
}
}
}
Converter
클래스를 Spring에 등록합니다. 이를 위해서는 @Component
어노테이션을 붙여 스프링 빈으로 등록하거나, XML 또는 Java 설정 파일에서 명시적으로 등록할 수 있습니다.import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new StringToLessonCategoryConverter());
}
}
이제 StringToLessonCategoryConverter
클래스가 문자열을 LessonCategory
Enum으로 변환해주는 역할을 하게 됩니다. 이렇게 설정한 뒤에는 @RequestParam
으로 받은 문자열 파라미터를 Enum으로 자동 변환하여 사용할 수 있게 됩니다.
예를 들어, 다음과 같이 컨트롤러 메소드에서 category
파라미터를 LessonCategory
Enum으로 받을 수 있습니다.
@GetMapping("/example")
public ResponseEntity<String> exampleController(
@RequestParam(name = "category") LessonCategory category) {
// category를 Enum 형태로 사용
return ResponseEntity.ok("Received category: " + category);
}
이렇게 설정하면 Spring이 문자열 파라미터를 Enum으로 변환해주므로 편리하게 사용할 수 있습니다.