@RequestParam으로 입력받은 String 문자열을 enum 타입으로 바꿔 사용할 수도 있지만, 매번 String 문자열을 enum 타입으로 바꾸지 않고, CustomConverter를 만들어 문자열을 enum 타입으로 변환할 수 있다.
Category
@Getter
public enum Category {
FashionStuff("FashionStuff"),
HomeLiving("HomeLiving"),
TechEletrics("TechEletrics"),
Beauty("Beauty"),
Food("Food"),
LeisureSports("LeisureSports");
private String categoryName;
Category(String category) {
this.categoryName = category;
}
public static Category ofName(String categoryStr) {
for (Category category : Category.values()) {
if (category.getCategoryName().equals(categoryStr))
return category;
}
throw new IllegalArgumentException("일치하는 카테고리가 없습니다.");
}
}
categoryName과 categoryStr이 일치하는 Category를 반환시켜주는 ofName() 메서드를 생성했다.
CategoryReqeustConverter
import com.team10.whatis.post.entity.Category;
import org.springframework.core.convert.converter.Converter;
public class CategoryRequestConverter implements Converter<String, Category> {
@Override
public Category convert(String categoryName) {
return Category.ofName(categoryName);
}
}
Converter 인터페이스 구현체인 CategoryRequestConverter를 생성해주었다.
convert 메서드를 override하여 Category enum 클래스에 생성해둔 ofName() 메서드를 통해 Category를 반환하도록 한다.
WebConfig
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new CategoryRequestConverter());
}
}
WebMvcConfigurer 구현체를 만들어, addFormatters 메서드를 override하여 생성한 CategoryRequestConverter를 추가한다.
PostController
@RestController
@RequestMapping("posts")
@RequiredArgsConstructor
public class PostController {
private final PostService postService;
@GetMapping
public ResponseDto<List<PostResponseDto>> postList(@PageableDefault(page = 0, size = 10, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable,
@RequestParam(value = "search", required = false) String keyword,
@RequestParam(value = "category", required = false) Category category) {
if (keyword != null) {
return postService.searchPost(pageable, keyword);
}
return postService.findAllPosts(pageable, category);
}
}
이제 PostController에서 @RequestParam으로 Category category 를 받을 때 알아서 Converter가 작동하여 String 문자열이 Category 타입으로 변환된다.
728x90
'Spring' 카테고리의 다른 글
[Spring] SpringBoot Prometheus, Grafana를 사용한 모니터링(Feat. Docker) (0) | 2023.05.25 |
---|---|
[Spring] Spring WebFlux 간단한 예제 (0) | 2023.05.25 |
[Spring] @RequestPart 사용하여 MultipartFile과 Dto 함께 받기, Postman 테스트 (0) | 2023.05.14 |
[Spring] AWS S3 서비스를 사용하여 이미지 업로드 (0) | 2023.05.09 |
[Spring] EC2 서버 실행 시, Web server failed to start. Port 8080 was aleady in use 해결 (0) | 2023.05.08 |