Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Wil
  • webflux
  • 코딩테스트
  • enum
  • java
  • MariaDB
  • Docker
  • spring
  • grafana
  • til
  • 코틀린 인 액션
  • 프로그래머스
  • kotlin
  • rsocket
  • 다이나믹 프로그래밍
  • 안드로이드
  • 백준
  • 에라토스테네스의 체
  • 레포지토리
  • 문자열
  • ec2
  • 프리코스
  • elasticsearch
  • 코틀린
  • 파이썬
  • 내림차순
  • SQL
  • 우아한테크코스
  • Android
  • kibana

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

Spring

[Spring] @RequestParam으로 Enum 타입 매개변수 받기

2023. 5. 15. 18:33

@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
    'Spring' 카테고리의 다른 글
    • [Spring] SpringBoot Prometheus, Grafana를 사용한 모니터링(Feat. Docker)
    • [Spring] Spring WebFlux 간단한 예제
    • [Spring] @RequestPart 사용하여 MultipartFile과 Dto 함께 받기, Postman 테스트
    • [Spring] AWS S3 서비스를 사용하여 이미지 업로드
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바